From ee3dd423b9ae51a3bcf830c9e7ca5ceba2bd2398 Mon Sep 17 00:00:00 2001 From: Pxl Date: Wed, 28 Sep 2022 08:54:49 +0800 Subject: [PATCH] [Bug](function) core dump on substr #13007 --- be/src/vec/functions/function_string.h | 4 ++++ .../string_functions/test_string_function.out | 21 +++++++++++++++++++ .../test_string_function.groovy | 7 +++++++ 3 files changed, 32 insertions(+) diff --git a/be/src/vec/functions/function_string.h b/be/src/vec/functions/function_string.h index c6294a08c4..a9834ad2ca 100644 --- a/be/src/vec/functions/function_string.h +++ b/be/src/vec/functions/function_string.h @@ -187,6 +187,10 @@ private: } int fixed_pos = start[i]; + if (fixed_pos < -(int)index.size()) { + StringOP::push_empty_string(i, res_chars, res_offsets); + continue; + } if (fixed_pos < 0) { fixed_pos = index.size() + fixed_pos + 1; } diff --git a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function.out b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function.out index 6bdd10491d..fb1a9c6bed 100644 --- a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function.out +++ b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function.out @@ -236,3 +236,24 @@ c1 -- !sql -- bc +-- !sql -- + + +-- !sql -- + + +-- !sql -- +a + +-- !sql -- + + +-- !sql -- +a + +-- !sql -- + + +-- !sql -- + + diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function.groovy index 8feee3e9e3..8ebd486b3d 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function.groovy @@ -125,4 +125,11 @@ suite("test_string_function") { qt_sql "select substring('abc1', 5);" qt_sql "select substring('abc1def', 2, 2);" + qt_sql "select substr('a',3,1);" + qt_sql "select substr('a',2,1);" + qt_sql "select substr('a',1,1);" + qt_sql "select substr('a',0,1);" + qt_sql "select substr('a',-1,1);" + qt_sql "select substr('a',-2,1);" + qt_sql "select substr('a',-3,1);" }