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