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/