diff options
| -rw-r--r-- | format/pack/ingest/drain.go | 22 | ||||
| -rw-r--r-- | format/pack/ingest/entry.go | 6 |
2 files changed, 16 insertions, 12 deletions
diff --git a/format/pack/ingest/drain.go b/format/pack/ingest/drain.go index 671423fb..13e276bd 100644 --- a/format/pack/ingest/drain.go +++ b/format/pack/ingest/drain.go @@ -12,13 +12,13 @@ import ( ) // 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,41 +28,41 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64, 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) 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 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"} } diff --git a/format/pack/ingest/entry.go b/format/pack/ingest/entry.go index f89ad4c8..5d22ada2 100644 --- a/format/pack/ingest/entry.go +++ b/format/pack/ingest/entry.go @@ -16,11 +16,15 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) { 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{ Offset: startOffset, |
