[Namazu-users-ja 832] Re: namazu/namazu.cgiで core-dump
Tadamasa Teranishi
yw3t-trns @ asahi-net.or.jp
2006年 9月 15日 (金) 02:22:39 JST
寺西です。
Tadamasa Teranishi wrote:
>
> この情報を元にちょっと調べてみます。
いろいろ調べてみると、cmp_phrase_hash 内で free した val.data に
アクセスする可能性がありました。
# デバッガの情報のまんまですけど。
> 素人考えでは、val.data[j]に入っているポインタの値が変になってる
> 様に思えるのですが、これがどこで alloc されてるのかが追えなくて…
その通りでした。
もう少し書くと、フレーズ検索の際に do_phrase_search の中から
cmp_phrase_hash を呼び出すのですが、この第二引数 val が
TOO_MUCH_* の場合に val.data は free 済みとなっています。
にもかかわらず、cmp_phrase_hash で使っているのでコアダンプするよう
です。
コアダンプせずに動く環境は、たまたま動いているだけでした。
おそらく "日本の歴史" で検索するのではなく、"日本 の 歴史" で検索
すればコアダンプしないと思います。
とりあえず、以下の修正を行えばコアダンプしないようになると思います。
ただ、
$ namazu -f namazurc "日本の歴史" .
検索結果
参考ヒット数: { [ 日本 (ヒット数が多すぎるので無視しました) ] [ の (
ヒット数が多すぎるので無視しました) ] [ 歴史: 1 ] :: 0 }
検索式にマッチする文書はありませんでした。
ですが、
$ namazu -f namazurc "日本 の 歴史" .
検索結果
参考ヒット数: [ 日本 (ヒット数が多すぎるので無視しました) ] [ の (ヒ
ット数が多すぎるので無視しました) ] [ 歴史: 1 ]
検索式にマッチする 1 個の文書が見つかりました。
1. test3.txt (スコア: 2)
著者: 不明
日付: Thu, 14 Sep 2006 17:14:26 +0900
歴史
/tmp/debug/test3.txt (5 bytes)
現在のリスト: 1 - 1
となります。フレーズ検索の場合、「ヒット数が多すぎるので無視しました」
というメッセージですが、個々のワードを無視しているのではなく、
フレーズ全体を無視するような動作となり、メッセージが適当とはいえない
かもしれません。
$ diff -up search.c.org search.c
--- search.c.org 2006-09-15 02:03:06.000000000 +0900
+++ search.c 2006-09-15 02:03:46.000000000 +0900
@@ -355,6 +355,10 @@ cmp_phrase_hash(int hash_key, NmzResult
if (val.num == 0) {
return val;
}
+ if (val.stat != SUCCESS) {
+ nmz_debug_printf("cmp_phrase_hash: val.stat [%d]\n", val.stat);
+ return val;
+ }
ptr = nmz_getidxptr(phrase_index, hash_key);
if (ptr < 0) {
nmz_free_hlist(val);
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
Namazu-users-ja メーリングリストの案内