From bf494d48d60765300d4c133ab8f6afc18a1089ad Mon Sep 17 00:00:00 2001 From: Lewis Hook Date: Sun, 6 Feb 2022 19:35:27 +0000 Subject: [PATCH] Improve error messages when objects have been corrupted on transfer - fixes #5268 --- backend/b2/b2.go | 4 ++-- backend/compress/compress.go | 2 +- backend/crypt/crypt.go | 2 +- fs/operations/copy.go | 4 ++-- vfs/read.go | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/b2/b2.go b/backend/b2/b2.go index 50413cc03..c65ba9731 100644 --- a/backend/b2/b2.go +++ b/backend/b2/b2.go @@ -1763,14 +1763,14 @@ func (file *openFile) Close() (err error) { // Check to see we read the correct number of bytes if file.o.Size() != file.bytes { - return fmt.Errorf("object corrupted on transfer - length mismatch (want %d got %d)", file.o.Size(), file.bytes) + return fmt.Errorf("corrupted on transfer: lengths differ want %d vs got %d", file.o.Size(), file.bytes) } // Check the SHA1 receivedSHA1 := file.o.sha1 calculatedSHA1 := fmt.Sprintf("%x", file.hash.Sum(nil)) if receivedSHA1 != "" && receivedSHA1 != calculatedSHA1 { - return fmt.Errorf("object corrupted on transfer - SHA1 mismatch (want %q got %q)", receivedSHA1, calculatedSHA1) + return fmt.Errorf("corrupted on transfer: SHA1 hashes differ want %q vs got %q", receivedSHA1, calculatedSHA1) } return nil diff --git a/backend/compress/compress.go b/backend/compress/compress.go index 5fb52c013..c11906a52 100644 --- a/backend/compress/compress.go +++ b/backend/compress/compress.go @@ -455,7 +455,7 @@ func (f *Fs) verifyObjectHash(ctx context.Context, o fs.Object, hasher *hash.Mul if err != nil { fs.Errorf(o, "Failed to remove corrupted object: %v", err) } - return fmt.Errorf("corrupted on transfer: %v compressed hashes differ %q vs %q", ht, srcHash, dstHash) + return fmt.Errorf("corrupted on transfer: %v compressed hashes differ src(%s) %q vs dst(%s) %q", ht, f.Fs, srcHash, o.Fs(), dstHash) } return nil } diff --git a/backend/crypt/crypt.go b/backend/crypt/crypt.go index 23b684ab8..c7511ff7a 100644 --- a/backend/crypt/crypt.go +++ b/backend/crypt/crypt.go @@ -520,7 +520,7 @@ func (f *Fs) put(ctx context.Context, in io.Reader, src fs.ObjectInfo, options [ if err != nil { fs.Errorf(o, "Failed to remove corrupted object: %v", err) } - return nil, fmt.Errorf("corrupted on transfer: %v encrypted hash differ src %q vs dst %q", ht, srcHash, dstHash) + return nil, fmt.Errorf("corrupted on transfer: %v encrypted hashes differ src(%s) %q vs dst(%s) %q", ht, f.Fs, srcHash, o.Fs(), dstHash) } fs.Debugf(src, "%v = %s OK", ht, srcHash) } diff --git a/fs/operations/copy.go b/fs/operations/copy.go index 4425c4974..e04b8a9e4 100644 --- a/fs/operations/copy.go +++ b/fs/operations/copy.go @@ -266,14 +266,14 @@ func (c *copy) manualCopy(ctx context.Context) (actionTaken string, newDst fs.Ob func (c *copy) verify(ctx context.Context, newDst fs.Object) (err error) { // Verify sizes are the same after transfer if sizeDiffers(ctx, c.src, newDst) { - return fmt.Errorf("corrupted on transfer: sizes differ %d vs %d", c.src.Size(), newDst.Size()) + return fmt.Errorf("corrupted on transfer: sizes differ src(%s) %d vs dst(%s) %d", c.src.Fs(), c.src.Size(), c.dst.Fs(), c.dst.Size()) } // Verify hashes are the same after transfer - ignoring blank hashes if c.hashType != hash.None { // checkHashes has logs and counts errors equal, _, srcSum, dstSum, _ := checkHashes(ctx, c.src, newDst, c.hashType) if !equal { - return fmt.Errorf("corrupted on transfer: %v hash differ %q vs %q", c.hashType, srcSum, dstSum) + return fmt.Errorf("corrupted on transfer: %v hashes differ src(%s) %q vs dst(%s) %q", c.hashType, c.src.Fs(), srcSum, c.dst.Fs(), dstSum) } } return nil diff --git a/vfs/read.go b/vfs/read.go index f890143c8..94427c1da 100644 --- a/vfs/read.go +++ b/vfs/read.go @@ -363,7 +363,7 @@ func (fh *ReadFileHandle) checkHash() error { return err } if !hash.Equals(dstSum, srcSum) { - return fmt.Errorf("corrupted on transfer: %v hash differ %q vs %q", hashType, dstSum, srcSum) + return fmt.Errorf("corrupted on transfer: %v hashes differ src %q vs dst %q", hashType, srcSum, dstSum) } }