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

Back to archive index

Kazuho Oku kazuh****@gmail*****
2008年 11月 6日 (木) 22:48:50 JST


奥@サイボウズ・ラボです。

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++;

-- 
Kazuho Oku




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