[groonga-dev,02536] Re: groonga-normalizer-mysql 1.0.6のgrn_nfkc_char_typeでクラッシュ

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 7月 29日 (火) 13:41:18 JST


須藤です。

In <CAHB5oTPauwGmtPjO0LFk9x=cWutAPTfhARA4xjZ+X-zR_5txYQ****@mail*****>
  "[groonga-dev,02534] groonga-normalizer-mysql 1.0.6のgrn_nfkc_char_typeでクラッシュ" on Tue, 29 Jul 2014 12:35:12 +0900,
  "yoku ts." <yoku0****@gmail*****> wrote:

> groonga-normalizer-mysql 1.0.6で
> mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark を使っていると、
> まれにクラッシュすることがあります。

> クエリーはこんなのです(サービス系のMroongaが吐いていたコアから
> 検索文字列を16進で吸い上げたので、変なconcatになってます。
> 
> SELECT * FROM t1 WHERE match(val) against (concat('*D+ ', 0xd6, 0xbc, 0xde, 0xac, 0xc9, 0x93, 0x27) IN BOOLEAN MODE)

報告ありがとうございます!

  https://github.com/groonga/groonga-normalizer-mysql/blob/master/normalizers/mysql.c#L194-199

でnormalized_codeが0x00000になったときに
normalized_character_lengthの値に変な値が入ったままになって
しまうからですね!

ちなみに、同じ文字列
  concat(0xd6, 0xbc, 0xde, 0xac, 0xc9, 0x93, 0x27)
をMySQL標準のutf8_unicode_ciで正規化したときはどんな文字列に
なるかわかりますか?groonga-normalizer-mysqlも同じ挙動にしよ
うと思います。

たぶん、元の文字がそのままでてくるか、文字が消えてしまうかの
どちらかだと思うんですが。。。元の文字かなぁ。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




groonga-dev メーリングリストの案内
Back to archive index