[groonga-dev,00294] grn_select()でsortbyなしのoffset指定で境界を越える

Back to archive index

Kouhei Sutou kou****@clear*****
2009年 11月 15日 (日) 15:25:22 JST


須藤です。

/d/selectでsortbyを指定せずにレコード数以上のoffsetや負の
offsetを指定するとレコードが存在しないところにアクセスできて
しまいます。

以下で確認できます。

  % NO_CUTTER=yes test/unit/run-test.sh -n test_negative_offset

↓はhashでの簡単な例ですが、grn_table_sort()でやっているよう
に、それぞれのcursorで負の数や大きな値のときのチェックをやっ
てあげないといけないような気がします。

diff --git a/lib/hash.c b/lib/hash.c
index 543f986..ad99da6 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -1548,6 +1548,10 @@ grn_hash_cursor_open(grn_ctx *ctx, grn_hash *hash,
       if (res) { offset--; }
     }
   } else {
+    int size;
+    size = GRN_HASH_SIZE(hash);
+    if (offset < 0)
+      offset += size;
     c->curr_rec += c->dir * offset;
   }
   c->rest = (limit < 0) ? GRN_ID_MAX : limit;

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード (http://www.clear-code.com/)




groonga-dev メーリングリストの案内
Back to archive index