From d790cc6a50e7e54bc0fe288905ee9660ab43fb44 Mon Sep 17 00:00:00 2001 From: stdpain <34912776+stdpain@users.noreply.github.com> Date: Thu, 3 Jun 2021 18:38:10 +0800 Subject: [PATCH] [BUG] Fixed the problem that substring function may access illegal address (#5952) --- be/src/exprs/string_functions.cpp | 2 +- be/test/exprs/string_functions_test.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/be/src/exprs/string_functions.cpp b/be/src/exprs/string_functions.cpp index 262e7f0bb7..26486cdd96 100644 --- a/be/src/exprs/string_functions.cpp +++ b/be/src/exprs/string_functions.cpp @@ -69,7 +69,7 @@ StringVal StringFunctions::substring(FunctionContext* context, const StringVal& if (str.is_null || pos.is_null || len.is_null || pos.val > str.len) { return StringVal::null(); } - if (len.val <= 0 || str.len == 0) { + if (len.val <= 0 || str.len == 0 || pos.val == 0) { return StringVal(); } diff --git a/be/test/exprs/string_functions_test.cpp b/be/test/exprs/string_functions_test.cpp index 92c92e71e4..c0fd49f630 100644 --- a/be/test/exprs/string_functions_test.cpp +++ b/be/test/exprs/string_functions_test.cpp @@ -291,6 +291,9 @@ TEST_F(StringFunctionsTest, null_or_empty) { TEST_F(StringFunctionsTest, substring) { doris_udf::FunctionContext* context = new doris_udf::FunctionContext(); + + ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("")), + StringFunctions::substring(context, StringVal("hello word"), 0, 5)); ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("hello")), StringFunctions::substring(context, StringVal("hello word"), 1, 5));