[Senna-dev 716] sen_query_termが落ちます

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2007年 11月 22日 (木) 17:18:38 JST


幸坂です。こんにちは。

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 */
>       }




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