forked from TrueCloudLab/restic
Handle pack loading errors in rebuild-index
Errors returned from backend.LoadAll() were not handled, leading to these fatal errors from the unpacker trying to read the size from the end of an empty buffer: `seeking to read header length failed: bytes.Reader.Seek: negative position` This change takes care of returning on error, as well as showing which pack failed to load and validating pack integrity.
This commit is contained in:
parent
0535490618
commit
ba35ca522a
1 changed files with 11 additions and 0 deletions
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/restic/restic/backend"
|
"github.com/restic/restic/backend"
|
||||||
"github.com/restic/restic/debug"
|
"github.com/restic/restic/debug"
|
||||||
|
@ -137,6 +138,16 @@ func (cmd CmdRebuildIndex) RebuildIndex() error {
|
||||||
|
|
||||||
h := backend.Handle{Type: backend.Data, Name: packID.String()}
|
h := backend.Handle{Type: backend.Data, Name: packID.String()}
|
||||||
buf, err = backend.LoadAll(cmd.repo.Backend(), h, buf)
|
buf, err = backend.LoadAll(cmd.repo.Backend(), h, buf)
|
||||||
|
if err != nil {
|
||||||
|
debug.Log("RebuildIndex.RebuildIndex", "error while loading pack %v", packID.Str())
|
||||||
|
return fmt.Errorf("error while loading pack %v: %v", packID.Str(), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
hash := backend.Hash(buf)
|
||||||
|
if !hash.Equal(packID) {
|
||||||
|
debug.Log("RebuildIndex.RebuildIndex", "Pack ID does not match, want %v, got %v", packID.Str(), hash.Str())
|
||||||
|
return fmt.Errorf("Pack ID does not match, want %v, got %v", packID.Str(), hash.Str())
|
||||||
|
}
|
||||||
|
|
||||||
up, err := pack.NewUnpacker(cmd.repo.Key(), bytes.NewReader(buf))
|
up, err := pack.NewUnpacker(cmd.repo.Key(), bytes.NewReader(buf))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue