ref: b252c04f6b257b32fc6457b7f58cc1bef91eb8d5
parent: 88732a8fb7779055543eb2caf11460505a283d89
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 21:26:02 EST 2026
format/pack/ingest: Looks like that's not actually the consumed we want
--- a/format/pack/ingest/drain.go
+++ b/format/pack/ingest/drain.go
@@ -12,13 +12,13 @@
)
// drainEntryPayload inflates one entry payload from stream and returns
-// (inflatedLength, consumedInput, oidForBaseEntry).
-func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64, objectid.ObjectID, error) {+// (inflatedLength, oidForBaseEntry).
+func drainEntryPayload(state *ingestState, record objectRecord) (int64, objectid.ObjectID, error) {var zero objectid.ObjectID
reader, err := zlib.NewReader(state.stream)
if err != nil {- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}}
defer func() { _ = reader.Close() }()@@ -28,12 +28,12 @@
if packfmt.IsBaseObjectType(record.packedType) {header, ok := objectheader.Encode(record.packedType, record.declaredSize)
if !ok {- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}}
hashImpl, err := state.algo.New()
if err != nil {- return 0, 0, zero, err
+ return 0, zero, err
}
_, _ = hashImpl.Write(header)
@@ -40,7 +40,7 @@
n, err := io.Copy(hashImpl, reader)
if err != nil {- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}}
total = n
@@ -47,22 +47,22 @@
oid, err := objectid.FromBytes(state.algo, hashImpl.Sum(nil))
if err != nil {- return 0, 0, zero, err
+ return 0, zero, err
}
- return total, reader.InputConsumed(), oid, nil
+ return total, oid, nil
}
if record.packedType == objecttype.TypeOfsDelta || record.packedType == objecttype.TypeRefDelta {n, err := io.Copy(io.Discard, reader)
if err != nil {- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}}
total = n
- return total, reader.InputConsumed(), zero, nil
+ return total, zero, nil
}
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "unsupported payload type"}+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "unsupported payload type"}}
--- a/format/pack/ingest/entry.go
+++ b/format/pack/ingest/entry.go
@@ -16,10 +16,14 @@
return 0, err
}
- contentLen, consumedInput, oid, err := drainEntryPayload(state, record)
+ payloadStartConsumed := state.stream.consumed
+
+ contentLen, oid, err := drainEntryPayload(state, record)
if err != nil {return 0, err
}
+
+ consumedInput := state.stream.consumed - payloadStartConsumed
if contentLen != record.declaredSize { return 0, &MalformedPackEntryError{--
⑨