Tasuku SUENAGA
a****@razil*****
2007年 11月 30日 (金) 17:18:59 JST
末永です。 おお。。。BULK(P)で落ちているとは。。 修正いたします! その他バグフィックスがたまってきたので、 Senna 1.0.10を出す予定です。 kousa****@nttda***** さんは書きました: > 幸坂です。こんにちは。 > > sen_query_termが落ちます。 > http://qwik.jp/senna/bug_report.html > この書式に習って書いてみます。 > > ・ハードウェア環境 > ・CPU種別:Intel(R) Xeon(TM) CPU 2.40GHz * 2 > ・メモリ容量:2GByte > ・ハードディスク容量:70GByte > ・バージョン情報 > ・OS:RHEL4 (32bit) kernel 2.6.9 > ・Sennaのバージョン 1.0.9 > ・起こっている問題 > ・sen_query_termが落ちます。 > ・検索対象コンテンツの情報 > ・10文字×3行 > ・再現方法 > 擬似コードを書きます。 > > int my_query_term_callback(const char* term, unsigned int len, void* > func_arg) { > int* n = (int*)func_arg; > (*n)++; > printf("test %d %.*s", *n, len, term); > return 1; > } > > main () { > ... > char str[128] = "aaa -bbb +ccc"; > int n = 0; > sen_query q = sen_query_open(str, strlen(str), sen_sel_or, 32, 3); > sen_query_term(q, &my_query_term_callback, &n); > } > > 出力結果: > test 1 aaa > Sementation Fault > (query.cの557行目のBULKP(c)で落ちているようです。) > > 予想していた出力結果 > test 1 aaa > test 2 bbb > test 3 ccc > > > 以下のように変更すると、予想通りの結果が返って来るのですが、 > そもそも、私の使用方法が間違っている可能性もあります。 > 何かわかりましたらご教示ください。 > > $ diff RELEASE-1.0.9/lib/query.c RELEASE-1.0.9_fix/lib/query.c > 557,562c557,562 > < if (BULKP(c)) { > < return func(c->u.b.value, c->u.b.size, func_arg); > < } > < for (token = c->u.l.car; token; token = token->u.l.cdr) { > < if (!query_term_rec(q, token, func, func_arg)) { > < return 0; /* abort */ > --- >> for (token = c; token != NIL; token = token->u.l.cdr) { >> if (BULKP(token->u.l.car)) { >> if (!func(token->u.l.car->u.b.value, >> token->u.l.car->u.b.size, func_arg)) { >> return 0; /* abort */ >> } --- Tasuku SUENAGA <a****@razil*****>