This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new f31b9bfe067 branch-4.1: [fix](be) Remove unsafe JsonbWriter key
overload #63355 (#63437)
f31b9bfe067 is described below
commit f31b9bfe06706c1a43cb2ed95106f3933f672e35
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu May 21 10:09:15 2026 +0800
branch-4.1: [fix](be) Remove unsafe JsonbWriter key overload #63355 (#63437)
Cherry-picked from #63355
Co-authored-by: Jerry Hu <[email protected]>
---
be/src/util/jsonb_writer.h | 2 --
be/test/core/jsonb/convert_field_to_type_test.cpp | 4 +--
be/test/core/jsonb/jsonb_document_test.cpp | 37 ++++++++++++-----------
be/test/util/jsonb_serialize_test.cpp | 8 ++---
4 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/be/src/util/jsonb_writer.h b/be/src/util/jsonb_writer.h
index 94765a5ef6e..ba168a9e343 100644
--- a/be/src/util/jsonb_writer.h
+++ b/be/src/util/jsonb_writer.h
@@ -100,8 +100,6 @@ public:
}
}
- bool writeKey(const char* key) { return writeKey(key, strlen(key)); }
-
// write a key string (or key id if an external dict is provided)
bool writeKey(const char* key, uint8_t len) {
if (!stack_.empty() && verifyKeyState()) {
diff --git a/be/test/core/jsonb/convert_field_to_type_test.cpp
b/be/test/core/jsonb/convert_field_to_type_test.cpp
index 921cb9693e5..8c96894d3d1 100644
--- a/be/test/core/jsonb/convert_field_to_type_test.cpp
+++ b/be/test/core/jsonb/convert_field_to_type_test.cpp
@@ -390,7 +390,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToJsonb) {
{
JsonbWriter test_writer;
test_writer.writeStartObject();
- test_writer.writeKey("key");
+ test_writer.writeKey("key", static_cast<uint8_t>(sizeof("key") - 1));
test_writer.writeString("value");
test_writer.writeEndObject();
@@ -513,4 +513,4 @@ TEST_F(ConvertFieldToTypeTest,
ConvertFieldToType_ErrorCases) {
}
}
-} // namespace doris
\ No newline at end of file
+} // namespace doris
diff --git a/be/test/core/jsonb/jsonb_document_test.cpp
b/be/test/core/jsonb/jsonb_document_test.cpp
index bffc21f46b9..c189afb025a 100644
--- a/be/test/core/jsonb/jsonb_document_test.cpp
+++ b/be/test/core/jsonb/jsonb_document_test.cpp
@@ -29,6 +29,7 @@
#include "util/jsonb_writer.h"
namespace doris {
+
class JsonbDocumentTest : public testing::Test {
protected:
void SetUp() override {}
@@ -40,27 +41,27 @@ TEST_F(JsonbDocumentTest, writer) {
JsonbWriter writer;
writer.writeStartObject();
- writer.writeKey("key_null");
+ writer.writeKey("key_null", static_cast<uint8_t>(sizeof("key_null") - 1));
writer.writeNull();
- writer.writeKey("key_true");
+ writer.writeKey("key_true", static_cast<uint8_t>(sizeof("key_true") - 1));
writer.writeBool(true);
- writer.writeKey("key_false");
+ writer.writeKey("key_false", static_cast<uint8_t>(sizeof("key_false") -
1));
writer.writeBool(false);
- writer.writeKey("key_int");
+ writer.writeKey("key_int", static_cast<uint8_t>(sizeof("key_int") - 1));
writer.writeInt(12345);
- writer.writeKey("key_float");
+ writer.writeKey("key_float", static_cast<uint8_t>(sizeof("key_float") -
1));
writer.writeFloat(123.456);
- writer.writeKey("key_string");
+ writer.writeKey("key_string", static_cast<uint8_t>(sizeof("key_string") -
1));
writer.writeStartString();
writer.writeString("hello world");
writer.writeEndString();
- writer.writeKey("key_array");
+ writer.writeKey("key_array", static_cast<uint8_t>(sizeof("key_array") -
1));
writer.writeStartArray();
writer.writeInt(1);
@@ -69,24 +70,24 @@ TEST_F(JsonbDocumentTest, writer) {
writer.writeEndString();
writer.writeEndArray();
- writer.writeKey("key_int128");
+ writer.writeKey("key_int128", static_cast<uint8_t>(sizeof("key_int128") -
1));
__int128_t int128_value = __int128_t(std::numeric_limits<uint64_t>::max())
+ 1;
writer.writeInt128(int128_value);
- writer.writeKey("key_decimal32");
+ writer.writeKey("key_decimal32",
static_cast<uint8_t>(sizeof("key_decimal32") - 1));
Decimal32 decimal_value32(int32_t(99999999));
writer.writeDecimal(decimal_value32, 9, 4);
- writer.writeKey("key_decimal64");
+ writer.writeKey("key_decimal64",
static_cast<uint8_t>(sizeof("key_decimal64") - 1));
Decimal64 decimal_value64(int64_t(999999999999999999ULL));
writer.writeDecimal(decimal_value64, 18, 4);
- writer.writeKey("key_decimal128");
+ writer.writeKey("key_decimal128",
static_cast<uint8_t>(sizeof("key_decimal128") - 1));
Decimal128V3
decimal_value((__int128_t(std::numeric_limits<uint64_t>::max())));
writer.writeDecimal(decimal_value, 30, 8);
- writer.writeKey("key_decimal256");
+ writer.writeKey("key_decimal256",
static_cast<uint8_t>(sizeof("key_decimal256") - 1));
wide::Int256
int256_value(wide::Int256(std::numeric_limits<__int128_t>::max()) * 2);
Decimal256 decimal256_value(int256_value);
writer.writeDecimal(decimal256_value, 40, 8);
@@ -218,21 +219,21 @@ TEST_F(JsonbDocumentTest, forobject) {
JsonbWriter writer;
writer.writeStartObject();
- writer.writeKey("key_null");
+ writer.writeKey("key_null", static_cast<uint8_t>(sizeof("key_null") - 1));
writer.writeNull();
- writer.writeKey("key_true");
+ writer.writeKey("key_true", static_cast<uint8_t>(sizeof("key_true") - 1));
writer.writeBool(true);
- writer.writeKey("key_false");
+ writer.writeKey("key_false", static_cast<uint8_t>(sizeof("key_false") -
1));
writer.writeBool(false);
- writer.writeKey("key_int");
+ writer.writeKey("key_int", static_cast<uint8_t>(sizeof("key_int") - 1));
writer.writeInt(12345);
// writer array
- writer.writeKey("key_array");
+ writer.writeKey("key_array", static_cast<uint8_t>(sizeof("key_array") -
1));
writer.writeStartArray();
writer.writeInt(1);
writer.writeStartString();
@@ -294,4 +295,4 @@ TEST_F(JsonbDocumentTest, invaild_jsonb_document) {
EXPECT_EQ(json_null, json_string);
}
-} // namespace doris
\ No newline at end of file
+} // namespace doris
diff --git a/be/test/util/jsonb_serialize_test.cpp
b/be/test/util/jsonb_serialize_test.cpp
index 5b636d0f7aa..75883bc2f8a 100644
--- a/be/test/util/jsonb_serialize_test.cpp
+++ b/be/test/util/jsonb_serialize_test.cpp
@@ -136,19 +136,19 @@ TEST_F(JsonbSerializeTest, serialization2) {
writer.writeKey("key_decimal32", 13);
- writer.writeKey("key_decimal32");
+ writer.writeKey("key_decimal32",
static_cast<uint8_t>(sizeof("key_decimal32") - 1));
Decimal32 decimal_value32(int32_t(99999999));
writer.writeDecimal(decimal_value32, 9, 4);
- writer.writeKey("key_decimal64");
+ writer.writeKey("key_decimal64",
static_cast<uint8_t>(sizeof("key_decimal64") - 1));
Decimal64 decimal_value64(int64_t(999999999999999999ULL));
writer.writeDecimal(decimal_value64, 18, 4);
- writer.writeKey("key_decimal128");
+ writer.writeKey("key_decimal128",
static_cast<uint8_t>(sizeof("key_decimal128") - 1));
Decimal128V3
decimal_value((__int128_t(std::numeric_limits<uint64_t>::max())));
writer.writeDecimal(decimal_value, 27, 8);
- writer.writeKey("key_decimal256");
+ writer.writeKey("key_decimal256",
static_cast<uint8_t>(sizeof("key_decimal256") - 1));
Decimal256
decimal256_value((wide::Int256(std::numeric_limits<__int128_t>::max()) * 2));
writer.writeDecimal(decimal256_value, 40, 8);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]