This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 8878ebd23ec [bugfix]json_length() BE crash fix (#32145) (#32484)
8878ebd23ec is described below

commit 8878ebd23ece0b9ba5fde12b8b6cc731fd00deed
Author: Kang <[email protected]>
AuthorDate: Tue Mar 19 20:46:45 2024 +0800

    [bugfix]json_length() BE crash fix (#32145) (#32484)
    
    Co-authored-by: Rohit Satardekar <[email protected]>
---
 be/src/vec/functions/function_jsonb.cpp                             | 5 +++--
 regression-test/data/jsonb_p0/test_jsonb_load_and_function.out      | 3 +++
 regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy | 1 +
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/be/src/vec/functions/function_jsonb.cpp 
b/be/src/vec/functions/function_jsonb.cpp
index cc0394e2a3e..f2a24c43648 100644
--- a/be/src/vec/functions/function_jsonb.cpp
+++ b/be/src/vec/functions/function_jsonb.cpp
@@ -1081,7 +1081,8 @@ struct JsonbLengthUtil {
         MutableColumnPtr res = return_type->create_column();
 
         for (size_t i = 0; i < input_rows_count; ++i) {
-            if (jsonb_data_column->is_null_at(i) || 
path_column->is_null_at(i)) {
+            if (jsonb_data_column->is_null_at(i) || path_column->is_null_at(i) 
||
+                (jsonb_data_column->get_data_at(i).size == 0)) {
                 null_map->get_data()[i] = 1;
                 res->insert_data(nullptr, 0);
                 continue;
@@ -1101,7 +1102,7 @@ struct JsonbLengthUtil {
             // doc is NOT necessary to be deleted since JsonbDocument will not 
allocate memory
             JsonbDocument* doc = 
JsonbDocument::createDocument(jsonb_value.data, jsonb_value.size);
             JsonbValue* value = doc->getValue()->findValue(path, nullptr);
-            if (UNLIKELY(jsonb_value.size == 0 || !value)) {
+            if (UNLIKELY(!value)) {
                 null_map->get_data()[i] = 1;
                 res->insert_data(nullptr, 0);
                 continue;
diff --git a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out 
b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
index 215f798df9b..8a3b573cebd 100644
--- a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
+++ b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
@@ -7494,6 +7494,9 @@ false
 -- !sql_json_length --
 2
 
+-- !sql_json_length --
+\N
+
 -- !select_length --
 1      \N      \N
 2      null    1
diff --git 
a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy 
b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
index 1d775a46ffa..491d642be4e 100644
--- a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
+++ b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
@@ -548,6 +548,7 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_sql_json_length """SELECT json_length('{"k1":"v31","k2":300}')"""
     qt_sql_json_length """SELECT json_length('{"a.b.c":{"k1.a1":"v31", "k2": 
300},"a":"niu"}')"""
     qt_sql_json_length """SELECT json_length('{"a":{"k1.a1":"v31", "k2": 
300},"b":"niu"}','\$.a')"""
+    qt_sql_json_length """SELECT json_length('abc','\$.k1')"""
 
     qt_select_length """SELECT id, j, json_length(j) FROM ${testTable} ORDER 
BY id"""
     qt_select_length """SELECT id, j, json_length(j, '\$[1]') FROM 
${testTable} ORDER BY id"""


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to