[Groonga-commit] groonga/groonga at 3a3c5b9 [master] sort: fix a crash bug

Back to archive index

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 



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