From 2a4e88d949b9a4637e41c2f5cd0027d1f9214f95 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Fri, 27 Jun 2025 17:04:20 -0400 Subject: [PATCH] tape: Fix size decoding math --- tape/dynamic.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tape/dynamic.go b/tape/dynamic.go index 4c03dae..2c53dba 100644 --- a/tape/dynamic.go +++ b/tape/dynamic.go @@ -68,9 +68,11 @@ func DecodeAny(decoder *Decoder, destination any, tag Tag) (n int, err error) { func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err error) { errWrongDestinationType := func(expected string) error { + // panic(fmt.Errorf( return fmt.Errorf( - "expected &%s destination, not %v", + "expected %s destination, not %v", expected, destination) + //) } if destination.Kind() != reflect.Pointer { @@ -84,11 +86,11 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err if err != nil { return n, err } case LI: // LI: - nn, err := decodeAndSetIntPtr(decoder, destination, tag.CN() - 1) + nn, err := decodeAndSetIntPtr(decoder, destination, tag.CN() + 1) n += nn; if err != nil { return n, err } case FP: // FP: - nn, err := decodeAndSetFloatPtr(decoder, destination, tag.CN() - 1) + nn, err := decodeAndSetFloatPtr(decoder, destination, tag.CN() + 1) n += nn; if err != nil { return n, err } case SBA: // SBA: * @@ -102,7 +104,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err // LBA: * destination, err := asByteArrayPtr(destination) if err != nil { return n, err } - length, nn, err := decoder.ReadUintN(tag.CN() - 1) + length, nn, err := decoder.ReadUintN(tag.CN() + 1) n += nn; if err != nil { return n, err } buffer := make([]byte, length) nn, err = decoder.Read(buffer) @@ -110,7 +112,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err *destination = buffer case OTA: // OTA: * - length, nn, err := decoder.ReadUintN(tag.CN() - 1) + length, nn, err := decoder.ReadUintN(tag.CN() + 1) n += nn; if err != nil { return n, err } oneTag, nn, err := decoder.ReadTag() n += nn; if err != nil { return n, err } @@ -142,7 +144,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err if table.Type() != reflect.TypeOf(dummyMap) { return n, errWrongDestinationType("map[uint16] any") } - length, nn, err := decoder.ReadUintN(tag.CN() - 1) + length, nn, err := decoder.ReadUintN(tag.CN() + 1) n += nn; if err != nil { return n, err } table.Clear() for _ = range length { @@ -152,7 +154,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err n += nn; if err != nil { return n, err } value, err := skeletonValue(itemTag) if err != nil { return n, err } - nn, err = decodeAny(decoder, value.Elem(), itemTag) + nn, err = decodeAny(decoder, value, itemTag) n += nn; if err != nil { return n, err } table.SetMapIndex(reflect.ValueOf(key), value) }