From 9c6001573e3ec266c45ff958d89d4c39150c5f47 Mon Sep 17 00:00:00 2001 From: funnywwh Date: Fri, 17 May 2024 00:59:28 +0000 Subject: [PATCH] fix Input out of bounds of slice --- go-ogg/ogg-demuxer.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/go-ogg/ogg-demuxer.go b/go-ogg/ogg-demuxer.go index b39dbbf..e21dbe5 100644 --- a/go-ogg/ogg-demuxer.go +++ b/go-ogg/ogg-demuxer.go @@ -157,16 +157,18 @@ func (demuxer *Demuxer) Input(buf []byte) (err error) { } else if stream.lost == 0 && page.isContinuePacket { appendLen := 0 for ; idx < int(page.segmentsCount); idx++ { - appendLen += int(page.seqmentTable[idx]) - if page.seqmentTable[idx] < 255 { - stream.cache = append(stream.cache, tmp[:appendLen]...) - if demuxer.OnPacket != nil { - demuxer.OnPacket(stream.streamId, stream.currentPage.granulePos, stream.cache, 0) - } - page.packets = append(page.packets, stream.cache) - stream.cache = stream.cache[:0] - tmp = tmp[appendLen:] - } + //fix out of bound of tmp + curSegLen := int(page.seqmentTable[idx]) + appendLen += curSegLen + if page.seqmentTable[idx] < 255 { + stream.cache = append(stream.cache, tmp[:curSegLen]...) + if demuxer.OnPacket != nil { + demuxer.OnPacket(stream.streamId, stream.currentPage.granulePos, stream.cache, 0) + } + page.packets = append(page.packets, stream.cache) + stream.cache = stream.cache[:0] + tmp = tmp[curSegLen:] + } } }