tape: Fix size decoding math
This commit is contained in:
parent
aa718cfe9f
commit
2a4e88d949
@ -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: <value: IntN>
|
||||
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: <value: FloatN>
|
||||
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: <data: U8>*
|
||||
@ -102,7 +104,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err
|
||||
// LBA: <length: UN> <data: U8>*
|
||||
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: UN> <elementTag: tape.Tag> <values>*
|
||||
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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user