yoku ts.
yoku0****@gmail*****
2014年 7月 29日 (火) 16:27:52 JST
こんにちは、yoku0825です。 > https://github.com/groonga/groonga-normalizer-mysql/blob/master/normalizers/mysql.c#L194-199 > > でnormalized_codeが0x00000になったときに > normalized_character_lengthの値に変な値が入ったままになって > しまうからですね! クラッシュするときとしないときがあるというのは、 同じ文字列を同じノーマライザーに通していても、 途中のnormalized_codeが同じものだとは限らないってことでしょうか。 (何か腑に落ちない感じはします。。 あとぱっと見、 mysql56> SELECT conv(hex(concat(0xd6, 0xbc, 0xde, 0xac, 0xc9, 0x93, 0x27)), 16, 2); +--------------------------------------------------------------------+ | conv(hex(concat(0xd6, 0xbc, 0xde, 0xac, 0xc9, 0x93, 0x27)), 16, 2) | +--------------------------------------------------------------------+ | 11010110101111001101111010101100110010011001001100100111 | +--------------------------------------------------------------------+ 1 row in set (0.00 sec) 連続して4ビット以上0になってるところが見当たらなくていいのかなぁ、うーんうーんって感じになったりもします。 ( ´-`).oO(でも落ちてるところがああなので、str[0]= '\0'なんだろうなぁ。うーんうーん。 > ちなみに、同じ文字列 > concat(0xd6, 0xbc, 0xde, 0xac, 0xc9, 0x93, 0x27) > をMySQL標準のutf8_unicode_ciで正規化したときはどんな文字列に > なるかわかりますか?groonga-normalizer-mysqlも同じ挙動にしよ > うと思います。 む、むむぅ。。探してみます。 (が、クラッシュが頻発しているので、ワークアラウンドっぽいものがあったら 探すのを諦めてそちらを適用したい所存。。 よろしくお願いします。 yoku0825, 2014年7月29日 13:41 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > 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 mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev >