shithub: furgit

Download patch

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{
--