From 1676d0214950281b8a4473ecd864454712faf46d Mon Sep 17 00:00:00 2001 From: Yohan Wal Date: Mon, 4 Nov 2024 14:55:14 +0800 Subject: [PATCH] fix: panic when jsonb corrupted (#4919) * refactor: json type update * test: update test * fix: convert when needed * revert: leave sqlness tests unchanged * fix: fmt * refactor: just refactor * Apply suggestions from code review Co-authored-by: Weny Xu * refactor: parse jsonb first * test: add bad cases * Update src/datatypes/src/vectors/binary.rs Co-authored-by: Weny Xu * fix: fmt * fix: fix clippy/check * fix: corrupted jsonb panic * chore(deps): change to rev --------- Co-authored-by: Weny Xu --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/datatypes/src/vectors/binary.rs | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53ab681cd6..91090f3087 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5523,8 +5523,8 @@ dependencies = [ [[package]] name = "jsonb" -version = "0.4.1" -source = "git+https://github.com/databendlabs/jsonb.git?rev=46ad50fc71cf75afbf98eec455f7892a6387c1fc#46ad50fc71cf75afbf98eec455f7892a6387c1fc" +version = "0.4.3" +source = "git+https://github.com/CookiePieWw/jsonb.git?rev=ed2d4f8575419ed434a4ae09dee18ca900915d9c#ed2d4f8575419ed434a4ae09dee18ca900915d9c" dependencies = [ "byteorder", "fast-float", diff --git a/Cargo.toml b/Cargo.toml index e45236758f..9b6d1489d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -125,7 +125,7 @@ greptime-proto = { git = "https://github.com/GreptimeTeam/greptime-proto.git", r humantime = "2.1" humantime-serde = "1.1" itertools = "0.10" -jsonb = { git = "https://github.com/databendlabs/jsonb.git", rev = "46ad50fc71cf75afbf98eec455f7892a6387c1fc", default-features = false } +jsonb = { git = "https://github.com/CookiePieWw/jsonb.git", rev = "ed2d4f8575419ed434a4ae09dee18ca900915d9c", default-features = false } lazy_static = "1.4" meter-core = { git = "https://github.com/GreptimeTeam/greptime-meter.git", rev = "a10facb353b41460eeb98578868ebf19c2084fac" } mockall = "0.11.4" diff --git a/src/datatypes/src/vectors/binary.rs b/src/datatypes/src/vectors/binary.rs index 9a690ea411..9bcbd11d93 100644 --- a/src/datatypes/src/vectors/binary.rs +++ b/src/datatypes/src/vectors/binary.rs @@ -462,5 +462,15 @@ mod tests { .convert_binary_to_json() .unwrap_err(); assert_matches!(error, error::Error::InvalidJson { .. }); + + // corrupted jsonb + let jsonb = jsonb::parse_value("{\"hello\": \"world\"}".as_bytes()) + .unwrap() + .to_vec(); + let corrupted_jsonb = jsonb[0..jsonb.len() - 1].to_vec(); + let error = BinaryVector::from(vec![corrupted_jsonb]) + .convert_binary_to_json() + .unwrap_err(); + assert_matches!(error, error::Error::InvalidJson { .. }); } }