Kouhei Sutou
null+****@clear*****
Wed Nov 23 23:55:54 JST 2016
Kouhei Sutou 2016-11-23 23:55:54 +0900 (Wed, 23 Nov 2016) New Revision: 3a3c5b9335f5507a6deb90efc02c828682d4d642 https://github.com/groonga/groonga/commit/3a3c5b9335f5507a6deb90efc02c828682d4d642 Message: sort: fix a crash bug It's caused when one of sort keys is a compressed column and --query and/or --filter are used. Copied files: test/command/suite/select/sort_keys/compressed/filter.expected (from test/command/suite/select/sort_keys/compressed.expected) test/command/suite/select/sort_keys/compressed/filter.test (from test/command/suite/select/sort_keys/compressed.test) Modified files: lib/db.c Renamed files: test/command/suite/select/sort_keys/compressed/no_filter.expected (from test/command/suite/select/sort_keys/compressed.expected) test/command/suite/select/sort_keys/compressed/no_filter.test (from test/command/suite/select/sort_keys/compressed.test) Modified: lib/db.c (+14 -2) =================================================================== --- lib/db.c 2016-11-23 23:20:59 +0900 (57478c5) +++ lib/db.c 2016-11-23 23:55:54 +0900 (0d78a38) @@ -12013,15 +12013,27 @@ grn_table_sort_value(grn_ctx *ctx, grn_obj *table, static grn_bool is_compressed_column(grn_ctx *ctx, grn_obj *obj) { + grn_obj *target_obj; + if (!obj) { return GRN_FALSE; } - if (obj->header.type != GRN_COLUMN_VAR_SIZE) { + if (obj->header.type == GRN_ACCESSOR) { + grn_accessor *a = (grn_accessor *)obj; + while (a->next) { + a = a->next; + } + target_obj = a->obj; + } else { + target_obj = obj; + } + + if (target_obj->header.type != GRN_COLUMN_VAR_SIZE) { return GRN_FALSE; } - switch (obj->header.flags & GRN_OBJ_COMPRESS_MASK) { + switch (target_obj->header.flags & GRN_OBJ_COMPRESS_MASK) { case GRN_OBJ_COMPRESS_ZLIB : case GRN_OBJ_COMPRESS_LZ4 : case GRN_OBJ_COMPRESS_ZSTD : Copied: test/command/suite/select/sort_keys/compressed/filter.expected (+1 -1) 94% =================================================================== --- test/command/suite/select/sort_keys/compressed.expected 2016-11-23 23:20:59 +0900 (6a9eda7) +++ test/command/suite/select/sort_keys/compressed/filter.expected 2016-11-23 23:55:54 +0900 (ed7f4dd) @@ -9,7 +9,7 @@ load --table Users {"_key": "mori", "name": "森"} ] [[0,0.0,0.0],3] -select Users --sort_keys name +select Users --filter true --sort_keys name [ [ 0, Copied: test/command/suite/select/sort_keys/compressed/filter.test (+1 -1) 84% =================================================================== --- test/command/suite/select/sort_keys/compressed.test 2016-11-23 23:20:59 +0900 (dc4a162) +++ test/command/suite/select/sort_keys/compressed/filter.test 2016-11-23 23:55:54 +0900 (0b5a6c3) @@ -8,4 +8,4 @@ load --table Users {"_key": "mori", "name": "森"} ] -select Users --sort_keys name +select Users --filter true --sort_keys name Renamed: test/command/suite/select/sort_keys/compressed/no_filter.expected (+0 -0) 100% =================================================================== Renamed: test/command/suite/select/sort_keys/compressed/no_filter.test (+0 -0) 100% =================================================================== -------------- next part -------------- HTML����������������������������... Download