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/)