diff options
| author | 2025-11-22 08:00:00 +0800 | |
|---|---|---|
| committer | 2025-11-22 08:00:00 +0800 | |
| commit | a635a2bf83179c81a34773f5c97863d07f0341c1 (patch) | |
| tree | 572c0cb60328c5e1609ff115fedc38d0d782848b /internal | |
| parent | bufpool: Return *Buffer (diff) | |
| signature | No signature | |
flatex: Remove the stale readByte(s) wrappers and just directly index the buffer
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/flatex/slice_inflate.go | 54 |
1 files changed, 18 insertions, 36 deletions
diff --git a/internal/flatex/slice_inflate.go b/internal/flatex/slice_inflate.go index 9ece08f4..d16a6441 100644 --- a/internal/flatex/slice_inflate.go +++ b/internal/flatex/slice_inflate.go @@ -48,27 +48,6 @@ func (f *sliceInflater) reset(src []byte, dict []byte) error { return nil } -func (f *sliceInflater) readByte() (byte, error) { - if f.pos >= len(f.input) { - return 0, io.ErrUnexpectedEOF - } - b := f.input[f.pos] - f.pos++ - f.roffset++ - return b, nil -} - -func (f *sliceInflater) readBytes(n int) ([]byte, error) { - if n < 0 || f.pos+n > len(f.input) { - f.pos = len(f.input) - return nil, io.ErrUnexpectedEOF - } - s := f.input[f.pos : f.pos+n] - f.pos += n - f.roffset += int64(n) - return s, nil -} - func (f *sliceInflater) nextBlock() { for f.nb < 1+2 { if err := f.moreBits(); err != nil { @@ -242,11 +221,14 @@ func (f *sliceInflater) dataBlock() { f.nb = 0 f.b = 0 - hdr, err := f.readBytes(4) - if err != nil { - f.err = err + if f.pos+4 > len(f.input) { + f.pos = len(f.input) + f.err = io.ErrUnexpectedEOF return } + hdr := f.input[f.pos : f.pos+4] + f.pos += 4 + f.roffset += 4 n := int(hdr[0]) | int(hdr[1])<<8 nn := int(hdr[2]) | int(hdr[3])<<8 if uint16(nn) != uint16(^n) { @@ -309,10 +291,12 @@ func (f *sliceInflater) finishBlock() { } func (f *sliceInflater) moreBits() error { - c, err := f.readByte() - if err != nil { - return err + if f.pos >= len(f.input) { + return io.ErrUnexpectedEOF } + c := f.input[f.pos] + f.pos++ + f.roffset++ f.b |= uint32(c) << (f.nb & 31) f.nb += 8 return nil @@ -323,12 +307,14 @@ func (f *sliceInflater) huffSym(h *huffmanDecoder) (int, error) { nb, b := f.nb, f.b for { for nb < n { - c, err := f.readByte() - if err != nil { + if f.pos >= len(f.input) { f.b = b f.nb = nb - return 0, err + return 0, io.ErrUnexpectedEOF } + c := f.input[f.pos] + f.pos++ + f.roffset++ b |= uint32(c) << (nb & 31) nb += 8 } @@ -373,12 +359,8 @@ func (f *sliceInflater) readHuffman() error { f.nb -= 5 + 5 + 4 codebits := f.codebits[:] bits := f.bits[:] - for i := range codebits { - codebits[i] = 0 - } - for i := range bits { - bits[i] = 0 - } + clear(codebits) + clear(bits) for i := 0; i < nclen; i++ { for f.nb < 3 { if err := f.moreBits(); err != nil { |
