encoding/cbor: fix skipping of ignored/missing fields in struct unmarshal

This commit is contained in:
Laytan Laats
2024-10-26 22:39:46 +02:00
parent 1e3a924e11
commit 4608d26e6e
2 changed files with 6 additions and 1 deletions

View File

@@ -664,6 +664,8 @@ _unmarshal_map :: proc(d: Decoder, v: any, ti: ^reflect.Type_Info, hdr: Header,
// Skips unused map entries.
if use_field_idx < 0 {
val := err_conv(_decode_from_decoder(d, allocator=context.temp_allocator)) or_return
destroy(val, context.temp_allocator)
continue
}
}

View File

@@ -392,6 +392,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
bar: struct {
hello: string,
world: string,
foo: string `cbor:"-"`,
},
baz: int,
}
@@ -401,6 +402,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
hello: string,
world: string,
hellope: string,
foo: string,
},
baz: int,
}
@@ -409,6 +411,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
hello = "hello",
world = "world",
hellope = "hellope",
foo = "foo",
},
baz = 4,
}
@@ -426,7 +429,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
less_out: Foo
uerr := cbor.unmarshal(string(more_bin), &less_out)
testing.expect_value(t, uerr, nil)
testing.expect_value(t, less, less_out)
testing.expect_value(t, less_out, less)
delete(more_bin)
delete(less_out.bar.hello)