2006年9月15日

[Namazu-users-ja 832] Re: namazu/namazu.cgiで core-dump

寺西です。

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@xxxxx
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 mailing list
Namazu-users-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja

投稿者 xml-rpc : 2006年9月15日 02:22
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/45974
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。