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/)