aboutsummaryrefslogtreecommitdiff
path: root/object/header/parse.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-13 03:32:21 +0000
committerGravatar Runxi Yu2026-06-13 04:59:51 +0000
commitbe63ecd9711b46135bbff1769c2e4c3642255ef1 (patch)
treed5581c8b2e438af2b8ae82dd8f200393b2dbc5d3 /object/header/parse.go
parentTODO: Update (diff)
Unify lengths
Diffstat (limited to 'object/header/parse.go')
-rw-r--r--object/header/parse.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/object/header/parse.go b/object/header/parse.go
index 5829a755..2b0c78e1 100644
--- a/object/header/parse.go
+++ b/object/header/parse.go
@@ -7,13 +7,14 @@ import (
"strconv"
"lindenii.org/go/furgit/object/typ"
+ "lindenii.org/go/lgo/intconv"
)
// ErrInvalidHeader indicates a malformed loose-object header.
var ErrInvalidHeader = errors.New("object/header: invalid header")
// Parse parses a canonical loose-object header ("type size\x00").
-func Parse(data []byte) (ty typ.Type, size uint64, consumed int, err error) {
+func Parse(data []byte) (ty typ.Type, size int, consumed int, err error) {
space := bytes.IndexByte(data, ' ')
if space <= 0 {
return 0, 0, 0, fmt.Errorf("%w: missing ' ' type/size separator", ErrInvalidHeader)
@@ -36,7 +37,12 @@ func Parse(data []byte) (ty typ.Type, size uint64, consumed int, err error) {
return 0, 0, 0, fmt.Errorf("%w: empty size field", ErrInvalidHeader)
}
- size, err = strconv.ParseUint(string(sizeBytes), 10, 64)
+ sizeU, err := strconv.ParseUint(string(sizeBytes), 10, 64)
+ if err != nil {
+ return 0, 0, 0, fmt.Errorf("%w: size %q: %w", ErrInvalidHeader, sizeBytes, err)
+ }
+
+ size, err = intconv.Uint64ToInt(sizeU)
if err != nil {
return 0, 0, 0, fmt.Errorf("%w: size %q: %w", ErrInvalidHeader, sizeBytes, err)
}