diff --git a/backend/common.go b/backend/common.go index 8ffb71bc..baa22307 100644 --- a/backend/common.go +++ b/backend/common.go @@ -230,6 +230,10 @@ func ParseCopySourceRange(size int64, acceptRange string) (int64, int64, error) // ParseCopySource parses x-amz-copy-source header and returns source bucket, // source object, versionId, error respectively func ParseCopySource(copySourceHeader string) (string, string, string, error) { + if copySourceHeader == "" { + return "", "", "", s3err.GetInvalidArgumentErr(s3err.InvalidArgCopySourceBucket, copySourceHeader) + } + if copySourceHeader[0] == '/' { copySourceHeader = copySourceHeader[1:] } diff --git a/backend/common_test.go b/backend/common_test.go index 993a7d8d..fa69eb66 100644 --- a/backend/common_test.go +++ b/backend/common_test.go @@ -223,6 +223,15 @@ func TestParseCopySource(t *testing.T) { wantErr: true, wantErrValue: s3err.GetInvalidArgumentErr(s3err.InvalidArgCopySourceEncoding, "mybucket/object%ZZ"), }, + { + name: "empty string", + copySourceHeader: "", + wantBucket: "", + wantObject: "", + wantVersionId: "", + wantErr: true, + wantErrValue: s3err.GetInvalidArgumentErr(s3err.InvalidArgCopySourceBucket, ""), + }, { name: "missing object", copySourceHeader: "mybucket",