diff options
Diffstat (limited to 'internal/zlibx/decompress.go')
| -rw-r--r-- | internal/zlibx/decompress.go | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/internal/zlibx/decompress.go b/internal/zlibx/decompress.go deleted file mode 100644 index 126c1fcb..00000000 --- a/internal/zlibx/decompress.go +++ /dev/null @@ -1,54 +0,0 @@ -package zlibx - -import ( - "encoding/binary" - "io" - - "codeberg.org/lindenii/furgit/internal/adler32" - "codeberg.org/lindenii/furgit/internal/bufpool" - "codeberg.org/lindenii/furgit/internal/flatex" -) - -func Decompress(src []byte) (bufpool.Buffer, error) { - out, _, err := DecompressSized(src, 0) - return out, err -} - -func DecompressSized(src []byte, sizeHint int) (buf bufpool.Buffer, consumed int, err error) { - if len(src) < 6 { - return bufpool.Buffer{}, 0, io.ErrUnexpectedEOF - } - - cmf := src[0] - flg := src[1] - if (cmf&0x0f != zlibDeflate) || (cmf>>4 > zlibMaxWindow) || (binary.BigEndian.Uint16(src[:2])%31 != 0) { - return bufpool.Buffer{}, 0, ErrHeader - } - - offset := 2 - if flg&0x20 != 0 { - return bufpool.Buffer{}, 0, ErrHeader - } - - if len(src[offset:]) < 4 { - return bufpool.Buffer{}, 0, io.ErrUnexpectedEOF - } - - deflateData := src[offset:] - out, consumed, err := flatex.DecompressSized(deflateData, sizeHint) - if err != nil { - return bufpool.Buffer{}, 0, err - } - - checksumPos := offset + consumed - if checksumPos+4 > len(src) { - out.Release() - return bufpool.Buffer{}, 0, io.ErrUnexpectedEOF - } - expected := binary.BigEndian.Uint32(src[checksumPos : checksumPos+4]) - if expected != adler32.Checksum(out.Bytes()) { - out.Release() - return bufpool.Buffer{}, 0, ErrChecksum - } - return out, checksumPos + 4, nil -} |
