Skip to content

Commit 00730b4

Browse files
committed
silently drops decoding all map values other ... (fixes #18734)
1 parent 3688abb commit 00730b4

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

vlib/x/json2/decode.v

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -832,18 +832,19 @@ fn (mut decoder Decoder) decode_map[K, V](mut val map[K]V) ! {
832832

833833
value_info := decoder.current_node.value
834834

835-
if value_info.position + value_info.length >= map_end {
835+
if value_info.position + value_info.length > map_end {
836836
break
837837
}
838838

839839
mut map_value := V{}
840840

841+
decoder.decode_value(mut map_value)!
842+
841843
$if V is $map {
842844
val[key] = map_value.move()
843845
} $else {
844846
val[key] = map_value
845847
}
846-
decoder.decode_value(mut val[key])!
847848
}
848849
} else {
849850
decoder.decode_error('Expected object, but got ${map_info.value_kind}')!
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import x.json2
2+
3+
fn test_decode_map_any_keeps_numeric_values() {
4+
payload := {
5+
'sub': json2.Any('453636')
6+
'aud': json2.Any('Coachonko')
7+
'iss': json2.Any('Coachonko')
8+
'nbf': json2.Any(1688229809)
9+
'iat': json2.Any(1688229809)
10+
'jti': json2.Any('e0a26a81-9cc0-4f52-b672-4f6f3d3b44a5')
11+
'exp': json2.Any(1688273009)
12+
}
13+
encoded := json2.encode(payload)
14+
decoded := json2.decode[map[string]json2.Any](encoded)!
15+
16+
assert decoded.len == payload.len
17+
assert 'sub' in decoded
18+
assert 'aud' in decoded
19+
assert 'iss' in decoded
20+
assert 'nbf' in decoded
21+
assert 'iat' in decoded
22+
assert 'jti' in decoded
23+
assert 'exp' in decoded
24+
25+
assert decoded['sub']!.str() == '453636'
26+
assert decoded['aud']!.str() == 'Coachonko'
27+
assert decoded['iss']!.str() == 'Coachonko'
28+
assert decoded['jti']!.str() == 'e0a26a81-9cc0-4f52-b672-4f6f3d3b44a5'
29+
assert decoded['nbf']!.f64() == f64(1688229809)
30+
assert decoded['iat']!.f64() == f64(1688229809)
31+
assert decoded['exp']!.f64() == f64(1688273009)
32+
}

0 commit comments

Comments
 (0)