aboutsummaryrefslogtreecommitdiff
path: root/internal/zlibx/decompress.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/zlibx/decompress.go')
-rw-r--r--internal/zlibx/decompress.go54
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
-}