From 2de4e17ff96166261d97658dc53f9fc62ec9126d Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 6 Feb 2024 20:36:56 +0000 Subject: [PATCH] bugfix : json_object, json_query, json_objectagg --- src/sql/engine/aggregate/ob_aggregate_processor.cpp | 2 +- src/sql/engine/expr/ob_expr_json_func_helper.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/sql/engine/aggregate/ob_aggregate_processor.cpp b/src/sql/engine/aggregate/ob_aggregate_processor.cpp index 841c76589f..4deb95fd50 100644 --- a/src/sql/engine/aggregate/ob_aggregate_processor.cpp +++ b/src/sql/engine/aggregate/ob_aggregate_processor.cpp @@ -7056,7 +7056,7 @@ int ObAggregateProcessor::get_ora_json_objectagg_result(const ObAggrInfo &aggr_i bool need_key_string_convert = (ObCharset::charset_type_by_coll(cs_type_key) != CHARSET_UTF8MB4); - if (OB_ISNULL(key_string.ptr())) { + if (OB_ISNULL(key_string.ptr()) || key_string.length() == 0) { ret = OB_ERR_NULL_VALUE; LOG_WARN("unexpected null result", K(ret)); } else if (is_absent_on_null && ob_is_null(type_value)) { diff --git a/src/sql/engine/expr/ob_expr_json_func_helper.cpp b/src/sql/engine/expr/ob_expr_json_func_helper.cpp index 824c79e8fc..c36a059fa8 100644 --- a/src/sql/engine/expr/ob_expr_json_func_helper.cpp +++ b/src/sql/engine/expr/ob_expr_json_func_helper.cpp @@ -1629,8 +1629,15 @@ int ObJsonExprHelper::calc_asciistr_in_expr(const ObString &src, buf[pos++] = '\\'; } if (OB_SUCC(ret) && '\\' != wchar) { + if (OB_UNLIKELY(pos >= buf_len)) { + ret = OB_SIZE_OVERFLOW; + LOG_WARN("size overflow", K(ret), K(pos), K(buf_len)); + } else { + buf[pos++] = 'u'; + } int64_t hex_writtern_bytes = 0; - if (OB_FAIL(hex_print(temp_buf + i*utf16_minmb_len, utf16_minmb_len, + if (OB_FAIL(ret)) { + } else if (OB_FAIL(hex_print(temp_buf + i*utf16_minmb_len, utf16_minmb_len, buf + pos, buf_len - pos, hex_writtern_bytes))) { LOG_WARN("fail to convert to hex", K(ret), K(temp_written_bytes), K(pos), K(buf_len)); } else {