Naoya Murakami
null+****@clear*****
Sat Jan 14 00:31:21 JST 2017
Naoya Murakami 2017-01-14 00:31:21 +0900 (Sat, 14 Jan 2017) New Revision: 41fefd15d1b84b02018569b97d53564a86da25ce https://github.com/groonga/groonga/commit/41fefd15d1b84b02018569b97d53564a86da25ce Merged 571ff56: Merge pull request #625 from naoa/group-calc-accessor-check Message: Avoid access to non existence sub records for group Modified files: lib/db.c Modified: lib/db.c (+20 -0) =================================================================== --- lib/db.c 2017-01-13 12:49:54 +0900 (e7365f8) +++ lib/db.c 2017-01-14 00:31:21 +0900 (5758f86) @@ -5575,6 +5575,17 @@ grn_obj_get_accessor_rset_value(grn_ctx *ctx, grn_obj *obj, (*rp)->obj = obj; switch (action) { +#define CHECK_GROUP_CALC_FLAG(flag) do { \ + if (GRN_TABLE_IS_GROUPED(obj)) { \ + grn_table_group_flags flags; \ + flags = DB_OBJ(obj)->flags.group; \ + if (flags & flag) { \ + succeeded = GRN_TRUE; \ + (*rp)->action = action; \ + goto exit; \ + } \ + } \ + } while(GRN_FALSE) case GRN_ACCESSOR_GET_SCORE : if (DB_OBJ(obj)->header.flags & GRN_OBJ_WITH_SUBREC) { (*rp)->action = action; @@ -5583,9 +5594,17 @@ grn_obj_get_accessor_rset_value(grn_ctx *ctx, grn_obj *obj, } break; case GRN_ACCESSOR_GET_MAX : + CHECK_GROUP_CALC_FLAG(GRN_TABLE_GROUP_CALC_MAX); + break; case GRN_ACCESSOR_GET_MIN : + CHECK_GROUP_CALC_FLAG(GRN_TABLE_GROUP_CALC_MIN); + break; case GRN_ACCESSOR_GET_SUM : + CHECK_GROUP_CALC_FLAG(GRN_TABLE_GROUP_CALC_SUM); + break; case GRN_ACCESSOR_GET_AVG : + CHECK_GROUP_CALC_FLAG(GRN_TABLE_GROUP_CALC_AVG); + break; case GRN_ACCESSOR_GET_NSUBRECS : if (GRN_TABLE_IS_GROUPED(obj)) { (*rp)->action = action; @@ -5614,6 +5633,7 @@ grn_obj_get_accessor_rset_value(grn_ctx *ctx, grn_obj *obj, if (!(obj = grn_ctx_at(ctx, obj->header.domain))) { goto exit; } +#undef CHECK_GROUP_CALC_FLAG } exit : -------------- next part -------------- HTML����������������������������...Download