From 3a8e52de74e81f499f44a47a937552378d5bc83b Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Fri, 29 Jul 2022 17:40:05 +0100 Subject: [PATCH] dropbox: fix infinite loop on uploading a corrupted file Before this change, if rclone attempted to upload a file which read more bytes than the size it declared then the uploader would enter an infinite loop. See: https://forum.rclone.org/t/transfer-percentages-100-again/32109 --- backend/dropbox/dropbox.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/dropbox/dropbox.go b/backend/dropbox/dropbox.go index bcee49821..100044862 100644 --- a/backend/dropbox/dropbox.go +++ b/backend/dropbox/dropbox.go @@ -1697,6 +1697,9 @@ func (o *Object) uploadChunked(ctx context.Context, in0 io.Reader, commitInfo *f if size > 0 { // if size is known, check if next chunk is final appendArg.Close = uint64(size)-in.BytesRead() <= uint64(chunkSize) + if in.BytesRead() > uint64(size) { + return nil, fmt.Errorf("expected %d bytes in input, but have read %d so far", size, in.BytesRead()) + } } else { // if size is unknown, upload as long as we can read full chunks from the reader appendArg.Close = in.BytesRead()-cursor.Offset < uint64(chunkSize)