From cccc2ae702ab017e3cebc9682353188beec5f238 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 25 Mar 2026 16:42:17 +0300 Subject: [PATCH] json2: fix decode with skipped fixed array field in union (fixes #25607) --- vlib/x/json2/encode.v | 2 +- vlib/x/json2/tests/encode_fixed_array_test.v | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 vlib/x/json2/tests/encode_fixed_array_test.v diff --git a/vlib/x/json2/encode.v b/vlib/x/json2/encode.v index bdfa46cb7..ae5908316 100644 --- a/vlib/x/json2/encode.v +++ b/vlib/x/json2/encode.v @@ -307,7 +307,7 @@ fn (mut encoder Encoder) encode_null() { unsafe { encoder.output.push_many(null_string.str, null_string.len) } } -fn (mut encoder Encoder) encode_array[T](val []T) { +fn (mut encoder Encoder) encode_array[T](val T) { encoder.output << `[` if encoder.prettify { encoder.increment_level() diff --git a/vlib/x/json2/tests/encode_fixed_array_test.v b/vlib/x/json2/tests/encode_fixed_array_test.v new file mode 100644 index 000000000..f18bc68e5 --- /dev/null +++ b/vlib/x/json2/tests/encode_fixed_array_test.v @@ -0,0 +1,19 @@ +import x.json2 + +union NumberOrBytes { + number u64 + bytes [8]u8 @[skip] +} + +fn test_encode_fixed_array() { + assert json2.encode([u8(1), 2, 3]!) == '[1,2,3]' +} + +fn test_encode_union_with_skipped_fixed_array_field() { + decoded := json2.decode[NumberOrBytes]('{"number":256}')! + + unsafe { + assert decoded.bytes == [u8(0), 1, 0, 0, 0, 0, 0, 0]! + } + assert json2.encode(decoded) == '{"number":256}' +} -- 2.39.5