[groonga-dev,00141] スタックオーバーフロー

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2009年 7月 28日 (火) 15:41:25 JST


須藤です。

grn_ctxはスタックを持っていますが、何度もgrn_expr_exec()して
いるとスタックがオーバーフローしてしまいます。

よくわかっていないのですが、sizeof(grn_obj *)で割る必要があ
るのかなぁと思いました。

diff --git a/lib/db.c b/lib/db.c
index 93b3c6d..aa57446 100644
--- a/lib/db.c
+++ b/lib/db.c
@@ -5460,7 +5460,7 @@ grn_obj_unlink(grn_ctx *ctx, grn_obj *obj)
 }
 
 #define WITH_SPSAVE(block) {\
-  ctx->impl->stack_curr = sp - ctx->impl->stack;\
+  ctx->impl->stack_curr = (sp - ctx->impl->stack) / sizeof(grn_obj *);\
   block\
   if (sp != ctx->impl->stack + ctx->impl->stack_curr) {\
     sp = ctx->impl->stack + ctx->impl->stack_curr;\
@@ -6309,7 +6309,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr)
       }
     }
     res = s0;
-    ctx->impl->stack_curr = sp == ctx->impl->stack ? 0 : sp - ctx->impl->stack - 1;
+    ctx->impl->stack_curr = sp == ctx->impl->stack ? 0 : (sp - ctx->impl->stack - 1) / sizeof(grn_obj *);
   }
 exit :
   GRN_API_RETURN(res);

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード (http://www.clear-code.com/)




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る