[Senna-dev 717] Re: sen_query_termが落ちます

Back to archive index

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




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