tape: Make table decoding more robust

This commit is contained in:
Sasha Koshka 2025-05-18 17:59:05 -04:00
parent dd5325b351
commit 0e7e935374

View File

@ -11,15 +11,19 @@ type TablePullFunc func() (tag uint16, value []byte, n int, err error)
func DecodeTable(data []byte) TablePullFunc {
n := 0
return func() (tag uint16, value []byte, n_ int, err error) {
if n >= len(data) { return 0, nil, n, ErrWrongBufferLength }
tag, nn, err := DecodeI16[uint16](data[n:])
if err != nil { return tag, value, n, err }
if err != nil { return 0, nil, n, err }
n += nn
if n >= len(data) { return 0, nil, n, ErrWrongBufferLength }
length, nn, err := DecodeGBEU[uint64](data[n:])
if err != nil { return tag, value, n, err }
if err != nil { return 0, nil, n, err }
n += nn
value = data[n:n + int(length)]
end := n + int(length)
if end > len(data) { return 0, nil, n, ErrWrongBufferLength }
value = data[n:end]
n += int(length)
return tag, value, n, err
}