[Fix](JsonReader) fix json with duplicate key entry may result out of bound exception (#38147)

#38146
This commit is contained in:
lihangyu
2024-07-19 22:53:02 +08:00
committed by GitHub
parent b24774c340
commit d9fd419e47
4 changed files with 31 additions and 0 deletions

View File

@ -1349,6 +1349,9 @@ Status NewJsonReader::_simdjson_set_column_value(simdjson::ondemand::object* val
// This key is not exist in slot desc, just ignore
continue;
}
if (_seen_columns[column_index]) {
continue;
}
simdjson::ondemand::value val = field.value();
auto* column_ptr = block.get_by_position(column_index).column->assume_mutable().get();
RETURN_IF_ERROR(

View File

@ -0,0 +1 @@
{"k1" : 10, "k1" : 100}

View File

@ -248,3 +248,5 @@ android \N \N \N \N \N
-- !select28 --
test k2_value
-- !select29 --
10 \N

View File

@ -853,4 +853,29 @@ suite("test_json_load", "p0") {
} finally {
try_sql("DROP TABLE IF EXISTS ${testTable}")
}
// add duplicate json entry case
try {
sql "DROP TABLE IF EXISTS ${testTable}"
sql """CREATE TABLE IF NOT EXISTS ${testTable}
(
`k1` varchar(1024) NULL,
`k2` varchar(1024) NULL
)
DUPLICATE KEY(`k1`)
COMMENT ''
DISTRIBUTED BY RANDOM BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);"""
load_json_data.call("${testTable}", "${testTable}_case29", 'false', 'true', 'json', '', '',
'', '', '', 'test_duplicate_json_keys.json', false, 1)
sql "sync"
qt_select29 "select * from ${testTable}"
} finally {
try_sql("DROP TABLE IF EXISTS ${testTable}")
}
}