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

Back to archive index

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
>



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