mirror of
https://github.com/rclone/rclone.git
synced 2026-11-04 11:43:22 +00:00
crypt: fix nil pointer panic in ObjectInfo.Hash - fixes #10173
OverrideRemote.UnWrap returns nil when the wrapped ObjectInfo is not an fs.Object, as when serve s3 uploads through a combine remote over crypt. Hash then called Fs() on that nil object and panicked. Return an empty hash instead, as for other sources which cannot be unwrapped.
This commit is contained in:
1 parent
be698038d8
commit
5152a0d96e
2 files changed
+11
-1
No files matched your search
@@ -1197,7 +1197,7 @@ func (o *ObjectInfo) Hash(ctx context.Context, hash hash.Type) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
// if this is wrapping a local object then we work out the hash
|
||||
if srcObj.Fs().Features().IsLocal {
|
||||
if srcObj != nil && srcObj.Fs().Features().IsLocal {
|
||||
// Read the data and encrypt it to calculate the hash
|
||||
fs.Debugf(o, "Computing %v hash of encrypted source", hash)
|
||||
return o.f.computeHashWithNonce(ctx, o.nonce, srcObj, hash)
|
||||
|
||||
@@ -93,6 +93,16 @@ func testObjectInfo(t *testing.T, f *Fs, wrap bool) {
|
||||
assert.Equal(t, fmt.Sprintf("%x", wantHash), gotHash)
|
||||
}
|
||||
|
||||
// Test ObjectInfo.Hash doesn't panic when the source is an
|
||||
// fs.OverrideRemote which wraps an fs.ObjectInfo that isn't an fs.Object
|
||||
func TestObjectInfoHashOverrideRemoteNotObject(t *testing.T) {
|
||||
src := object.NewStaticObjectInfo("file", time.Now(), 3, true, nil, nil)
|
||||
oi := (&Fs{}).newObjectInfo(fs.NewOverrideRemote(src, "new_remote"), nonce{})
|
||||
gotHash, err := oi.Hash(context.Background(), hash.MD5)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "", gotHash)
|
||||
}
|
||||
|
||||
func testComputeHash(t *testing.T, f *Fs) {
|
||||
var (
|
||||
contents = random.String(100)
|
||||
|
||||
Reference in new issue
Block a user