aboutsummaryrefslogtreecommitdiff
path: root/object/header
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
parentTODO: Update (diff)
Unify lengths
Diffstat (limited to 'object/header')
-rw-r--r--object/header/append.go4
-rw-r--r--object/header/parse.go10
2 files changed, 10 insertions, 4 deletions
diff --git a/object/header/append.go b/object/header/append.go
index b204002d..b8d6669d 100644
--- a/object/header/append.go
+++ b/object/header/append.go
@@ -8,13 +8,13 @@ import (
)
// Append appends a canonical loose-object header ("type size\x00") to dst.
-func Append(dst []byte, ty typ.Type, size uint64) []byte {
+func Append(dst []byte, ty typ.Type, size int) []byte {
tyName := ty.Name()
dst = slices.Grow(dst, len(tyName)+1+19+1)
dst = append(dst, tyName...)
dst = append(dst, ' ')
- dst = strconv.AppendUint(dst, size, 10)
+ dst = strconv.AppendInt(dst, int64(size), 10)
dst = append(dst, 0)
return dst
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)
}