aboutsummaryrefslogtreecommitdiff
path: root/objectstore/packed/entry_parse.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-21 13:38:02 +0800
committerGravatar Runxi Yu2026-02-21 14:28:15 +0800
commit94482cb2c97aa215f83940643c5d4c0933727dcb (patch)
treebee22fa113542abd1b863ee251fdcf0f9bd409b5 /objectstore/packed/entry_parse.go
parentdiff: Add package-level doc comment (diff)
signatureNo signature
*: Modernize and lint; add CI v0.1.17
Diffstat (limited to 'objectstore/packed/entry_parse.go')
-rw-r--r--objectstore/packed/entry_parse.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/objectstore/packed/entry_parse.go b/objectstore/packed/entry_parse.go
index e3cbeac3..76fcb754 100644
--- a/objectstore/packed/entry_parse.go
+++ b/objectstore/packed/entry_parse.go
@@ -3,6 +3,7 @@ package packed
import (
"fmt"
+ "codeberg.org/lindenii/furgit/internal/intconv"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objecttype"
)
@@ -28,7 +29,10 @@ func parseEntryMeta(pack *packFile, algo objectid.Algorithm, offset uint64) (ent
return zero, fmt.Errorf("objectstore/packed: pack %q offset %d out of bounds", pack.name, offset)
}
- pos := int(offset)
+ pos, err := intconv.Uint64ToInt(offset)
+ if err != nil {
+ return zero, fmt.Errorf("objectstore/packed: pack %q offset conversion: %w", pack.name, err)
+ }
first := pack.data[pos]
pos++
@@ -76,6 +80,8 @@ func parseEntryMeta(pack *packFile, algo objectid.Algorithm, offset uint64) (ent
return zero, fmt.Errorf("objectstore/packed: pack %q has invalid ofs-delta base", pack.name)
}
meta.baseOfs = offset - dist
+ case objecttype.TypeInvalid, objecttype.TypeFuture:
+ return zero, fmt.Errorf("objectstore/packed: pack %q has unsupported object type %d", pack.name, meta.ty)
default:
return zero, fmt.Errorf("objectstore/packed: pack %q has unsupported object type %d", pack.name, meta.ty)
}
@@ -111,6 +117,8 @@ func isBaseObjectType(ty objecttype.Type) bool {
switch ty {
case objecttype.TypeCommit, objecttype.TypeTree, objecttype.TypeBlob, objecttype.TypeTag:
return true
+ case objecttype.TypeInvalid, objecttype.TypeFuture, objecttype.TypeOfsDelta, objecttype.TypeRefDelta:
+ return false
default:
return false
}