ref: 6e28d6a7ec210349b8c336249ba130422310fecb
parent: 36ca8828cb5fb76a2a9b6c821f7d7ca18e9e83bc
author: Runxi Yu <me@runxiyu.org>
date: Sun Feb 22 04:59:27 EST 2026
objectstore/packed: Pre-allocate instead of ReadAll
--- a/objectstore/packed/entry_inflate.go
+++ b/objectstore/packed/entry_inflate.go
@@ -4,6 +4,7 @@
"bytes"
"fmt"
"io"
+ "math"
"codeberg.org/lindenii/furgit/internal/zlib"
)
@@ -17,8 +18,6 @@
}
// inflateAt inflates one entry payload from data offset.
-//
-// When expectedSize is non-negative, the inflated length must match.
func inflateAt(pack *packFile, offset int, expectedSize int64) ([]byte, error) {reader, err := zlibReaderAt(pack, offset)
if err != nil {@@ -26,17 +25,25 @@
}
defer func() { _ = reader.Close() }()+ if expectedSize >= 0 {+ if expectedSize > int64(math.MaxInt) {+ return nil, fmt.Errorf(
+ "objectstore/packed: pack %q expected inflated size overflows int: %d",
+ pack.name,
+ expectedSize,
+ )
+ }
+
+ body := make([]byte, int(expectedSize))
+ if _, err := io.ReadFull(reader, body); err != nil {+ return nil, err
+ }
+ return body, nil
+ }
+
body, err := io.ReadAll(reader)
if err != nil {return nil, err
- }
- if expectedSize >= 0 && int64(len(body)) != expectedSize {- return nil, fmt.Errorf(
- "objectstore/packed: pack %q inflated size mismatch: got %d want %d",
- pack.name,
- len(body),
- expectedSize,
- )
}
return body, nil
}
--
⑨