Skip to content

Commit

Permalink
[BugFix] Fix the bug of bitmap_to_string overflow (#37405)
Browse files Browse the repository at this point in the history
Signed-off-by: trueeyu <lxhhust350@qq.com>
(cherry picked from commit 299165e)
  • Loading branch information
trueeyu authored and mergify[bot] committed Dec 20, 2023
1 parent f7dbf00 commit 4294f60
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
2 changes: 1 addition & 1 deletion be/src/types/bitmap_value.cpp
Expand Up @@ -835,7 +835,7 @@ std::string BitmapValue::to_string() const {
}
case SET:
int pos = 0;
int64_t values[_set->size()];
uint64_t values[_set->size()];
for (auto value : *_set) {
values[pos++] = value;
}
Expand Down
13 changes: 13 additions & 0 deletions be/test/types/bitmap_value_test.cpp
Expand Up @@ -671,6 +671,19 @@ TEST_F(BitmapValueTest, bitmap_to_string) {
"0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,"
"37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63",
_large_bitmap.to_string().c_str());

auto bitmap = std::make_unique<BitmapValue>(18446744073709551611ul);
ASSERT_EQ("18446744073709551611", bitmap->to_string());
bitmap->add(18446744073709551612ul);
ASSERT_EQ("18446744073709551611,18446744073709551612", bitmap->to_string());
for (size_t i = 0; i < 64; i++) {
bitmap->add(i);
}
ASSERT_EQ(
"0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,"
"37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,18446744073709551611,"
"18446744073709551612",
bitmap->to_string());
}

TEST_F(BitmapValueTest, bitmap_to_array) {
Expand Down
31 changes: 31 additions & 0 deletions test/sql/test_bitmap_functions/R/test_bitmap_to_string
@@ -0,0 +1,31 @@
-- name: test_bitmap_to_string
CREATE TABLE `t1` (
`c1` int(11) NULL COMMENT "",
`c2` bitmap BITMAP_UNION NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`c1`)
DISTRIBUTED BY HASH(`c1`) BUCKETS 1
PROPERTIES ("replication_num" = "1");
-- result:
-- !result
insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551611));
-- result:
E: (1064, "Getting analyzing error. Detail message: Unknown table function 'generate_series(LARGEINT)'.")
-- !result
select bitmap_to_string(c2) from t1;
-- result:
-- !result
insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551611, 18446744073709551615));
-- result:
-- !result
select bitmap_to_string(c2) from t1;
-- result:
18446744073709551611,18446744073709551612,18446744073709551613,18446744073709551614,18446744073709551615
-- !result
insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551551, 18446744073709551615));
-- result:
-- !result
select bitmap_to_string(c2) from t1;
-- result:
18446744073709551551,18446744073709551552,18446744073709551553,18446744073709551554,18446744073709551555,18446744073709551556,18446744073709551557,18446744073709551558,18446744073709551559,18446744073709551560,18446744073709551561,18446744073709551562,18446744073709551563,18446744073709551564,18446744073709551565,18446744073709551566,18446744073709551567,18446744073709551568,18446744073709551569,18446744073709551570,18446744073709551571,18446744073709551572,18446744073709551573,18446744073709551574,18446744073709551575,18446744073709551576,18446744073709551577,18446744073709551578,18446744073709551579,18446744073709551580,18446744073709551581,18446744073709551582,18446744073709551583,18446744073709551584,18446744073709551585,18446744073709551586,18446744073709551587,18446744073709551588,18446744073709551589,18446744073709551590,18446744073709551591,18446744073709551592,18446744073709551593,18446744073709551594,18446744073709551595,18446744073709551596,18446744073709551597,18446744073709551598,18446744073709551599,18446744073709551600,18446744073709551601,18446744073709551602,18446744073709551603,18446744073709551604,18446744073709551605,18446744073709551606,18446744073709551607,18446744073709551608,18446744073709551609,18446744073709551610,18446744073709551611,18446744073709551612,18446744073709551613,18446744073709551614,18446744073709551615
-- !result
19 changes: 19 additions & 0 deletions test/sql/test_bitmap_functions/T/test_bitmap_to_string
@@ -0,0 +1,19 @@
-- name: test_bitmap_to_string

-- large int
CREATE TABLE `t1` (
`c1` int(11) NULL COMMENT "",
`c2` bitmap BITMAP_UNION NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`c1`)
DISTRIBUTED BY HASH(`c1`) BUCKETS 1
PROPERTIES ("replication_num" = "1");

insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551611));
select bitmap_to_string(c2) from t1;

insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551611, 18446744073709551615));
select bitmap_to_string(c2) from t1;

insert into t1 select 1, bitmap_agg(generate_series) from TABLE(generate_series(18446744073709551551, 18446744073709551615));
select bitmap_to_string(c2) from t1;

0 comments on commit 4294f60

Please sign in to comment.