check: use ReadFull to load pack header in checkPack

This ensures that the pack header is actually read completely.
Previously, for a truncated file it was possible to only read a part of
the header, as backend.Load(...) is not guaranteed to return as many
bytes as requested by the length parameter.
This commit is contained in:
Michael Eischer 2024-05-11 00:18:11 +02:00
parent 8f8d872a68
commit 74d90653e0
1 changed files with 3 additions and 1 deletions

View File

@ -605,11 +605,13 @@ func checkPackInner(ctx context.Context, r restic.Repository, id restic.ID, blob
if err != nil { if err != nil {
return &partialReadError{err} return &partialReadError{err}
} }
curPos += minHdrStart - curPos
} }
// read remainder, which should be the pack header // read remainder, which should be the pack header
var err error var err error
hdrBuf, err = io.ReadAll(bufRd) hdrBuf = make([]byte, int(size-int64(curPos)))
_, err = io.ReadFull(bufRd, hdrBuf)
if err != nil { if err != nil {
return &partialReadError{err} return &partialReadError{err}
} }