[Groonga-commit] groonga/groonga at f508566 [master] grn_ts: fix a bug of checks for the number of arguments

Back to archive index

susumu.yata null+****@clear*****
Thu Nov 12 13:16:09 JST 2015


susumu.yata	2015-11-12 13:16:09 +0900 (Thu, 12 Nov 2015)

  New Revision: f508566fa044bbbb032c4ec0a0e9cd11144ed11e
  https://github.com/groonga/groonga/commit/f508566fa044bbbb032c4ec0a0e9cd11144ed11e

  Message:
    grn_ts: fix a bug of checks for the number of arguments

  Modified files:
    lib/ts/ts_expr.c

  Modified: lib/ts/ts_expr.c (+15 -3)
===================================================================
--- lib/ts/ts_expr.c    2015-11-12 12:33:14 +0900 (ede1472)
+++ lib/ts/ts_expr.c    2015-11-12 13:16:09 +0900 (21e3a72)
@@ -801,7 +801,7 @@ grn_rc
 grn_ts_expr_push_op(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_op_type op_type) {
   grn_rc rc;
   grn_ts_expr_node **args, *node;
-  size_t i, n_args;
+  size_t i, n_args, max_n_args;
   if (!ctx) {
     return GRN_INVALID_ARGUMENT;
   }
@@ -812,7 +812,11 @@ grn_ts_expr_push_op(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_op_type op_type) {
   if (!n_args) {
     GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid #arguments: %zu", n_args);
   }
-  if (n_args > expr->stack_depth) {
+  max_n_args = expr->stack_depth;
+  if (expr->n_bridges) {
+    max_n_args -= expr->bridges[expr->n_bridges - 1].stack_depth;
+  }
+  if (n_args > max_n_args) {
     GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid #arguments: %zu, %zu",
                       n_args, expr->stack_depth);
   }
@@ -988,13 +992,21 @@ grn_ts_expr_reserve_bridges(grn_ctx *ctx, grn_ts_expr *expr) {
 grn_rc
 grn_ts_expr_begin_subexpr(grn_ctx *ctx, grn_ts_expr *expr) {
   grn_rc rc;
+  size_t max_n_args;
   grn_obj *obj;
   grn_ts_expr_node *node;
   grn_ts_expr_bridge *bridge;
   if (!ctx) {
     return GRN_INVALID_ARGUMENT;
   }
-  if (!expr || (expr->type != GRN_TS_EXPR_INCOMPLETE) || !expr->stack_depth) {
+  if (!expr || (expr->type != GRN_TS_EXPR_INCOMPLETE)) {
+    GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");
+  }
+  max_n_args = expr->stack_depth;
+  if (expr->n_bridges) {
+    max_n_args -= expr->bridges[expr->n_bridges - 1].stack_depth;
+  }
+  if (!max_n_args) {
     GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");
   }
 
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index