From 0e7e9353749e1245e063d79b2e7e20c3ad0a74bb Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sun, 18 May 2025 17:59:05 -0400 Subject: [PATCH] tape: Make table decoding more robust --- tape/table.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tape/table.go b/tape/table.go index 28f0ea2..349aa79 100644 --- a/tape/table.go +++ b/tape/table.go @@ -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 }