diff --git a/core/encoding/cbor/unmarshal.odin b/core/encoding/cbor/unmarshal.odin index ed8e9cbfc..c39255d9d 100644 --- a/core/encoding/cbor/unmarshal.odin +++ b/core/encoding/cbor/unmarshal.odin @@ -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 } } diff --git a/tests/core/encoding/cbor/test_core_cbor.odin b/tests/core/encoding/cbor/test_core_cbor.odin index bd0eb0003..c614727b9 100644 --- a/tests/core/encoding/cbor/test_core_cbor.odin +++ b/tests/core/encoding/cbor/test_core_cbor.odin @@ -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)