[Senna-dev 1071] Re: 壊れたマルチバイト文字列で検索すると無限ループ

Back to archive index

morita morit****@razil*****
2008年 11月 7日 (金) 02:14:18 JST


森です。

いろいろパッチありがとうございます! とても助かります。
main trunkに反映すると共に、
これらを取り込んでsenna-1.1.4としてリリースさせていただきます〜。

Kazuho Oku さんは書きました:
> 奥@サイボウズ・ラボです。
> 
> UTF-8 等で壊れた文字列を受け取った場合に get_phrase
> 内で無限ループに入ってしまうという症状があったのでパッチを添付します。呼び出し側で対処すべき問題ではないか、という議論はあり得るかと思いますが、Tritonn-1.0.10
> だと素通しでした。
> #ウェブアプリもバイト指向なので素通り... そしてサービスが固まったorz
> 
> --- ../senna-1.1.3.orig/lib/query.c	2008-05-21 18:26:19.000000000 +0900
> +++ ./lib/query.c	2008-11-06 22:36:30.000000000 +0900
> @@ -145,7 +145,10 @@
>        break;
>      }
>      len = sen_str_charlen_nonnull(s, q->str_end, q->encoding);
> -    if (len == 1) {
> +    if (len == 0) {
> +      /* invalid string containing malformed multibyte char */
> +      return NULL;
> +    } else if (len == 1) {
>        if (*s == SEN_QUERY_QUOTER) {
>          q->cur = s + 1;
>          break;
> @@ -246,7 +256,9 @@
>        return NIL;
>      case SEN_QUERY_QUOTEL :
>        q->cur++;
> -      token = get_phrase(q);
> +      if ((token = get_phrase(q)) == NULL) {
> +	return NIL;
> +      }
>        break;
>      case SEN_QUERY_PREFIX :
>        q->cur++;
> 




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