tape: Properly allocate maps when decoding KTV

This commit is contained in:
Sasha Koshka 2025-10-12 18:28:36 -04:00
parent 2e03867c66
commit ba2dc6b53f

View File

@ -116,7 +116,7 @@ func DecodeAnyInto(decoder *Decoder, destination any, tag Tag) (n int, err error
func DecodeAny(decoder *Decoder, tag Tag) (value any, n int, err error) {
destination, err := skeletonPointer(decoder, tag)
if err != nil { return nil, n, err }
nn, err := decodeAny(decoder, destination, tag)
nn, err := decodeAny(decoder, destination.Elem(), tag)
n += nn; if err != nil { return nil, n, err }
return destination.Elem().Interface(), n, err
}
@ -496,7 +496,11 @@ func skeletonValue(decoder *Decoder, tag Tag) (reflect.Value, error) {
func skeletonPointer(decoder *Decoder, tag Tag) (reflect.Value, error) {
typ, err := typeOf(decoder, tag)
if err != nil { return reflect.Value { }, err }
return reflect.New(typ), nil
value := reflect.New(typ)
if tag.Is(KTV) {
value.Elem().Set(reflect.MakeMap(typ))
}
return value, nil
}
// typeOf returns the type of the current tag being decoded. It does not use up