diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-09-03 17:38:39 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-09-03 17:38:39 -0700 |
| commit | 491f7636f8a6d24dcb65f1b23132101b2f565b4b (patch) | |
| tree | e5ea58693cc29bc82535a158d63732ec03c9d0c1 | |
| parent | bca4a9de783375f451658b7a9361baa407aa2f2e (diff) | |
| download | seaweedfs-491f7636f8a6d24dcb65f1b23132101b2f565b4b.tar.xz seaweedfs-491f7636f8a6d24dcb65f1b23132101b2f565b4b.zip | |
s3: CopyObject return http Status 400 Bad Request for non-existing source
fix https://github.com/chrislusf/seaweedfs/issues/2306
| -rw-r--r-- | weed/s3api/s3api_object_copy_handlers.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/weed/s3api/s3api_object_copy_handlers.go b/weed/s3api/s3api_object_copy_handlers.go index 60dd54152..86dec2b45 100644 --- a/weed/s3api/s3api_object_copy_handlers.go +++ b/weed/s3api/s3api_object_copy_handlers.go @@ -33,11 +33,13 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request entry, err := s3a.getEntry(dir, name) if err != nil { s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) + return } entry.Extended = weed_server.SaveAmzMetaData(r, entry.Extended, isReplace(r)) err = s3a.touch(dir, name, entry) if err != nil { s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) + return } writeSuccessResponseXML(w, CopyObjectResult{ ETag: fmt.Sprintf("%x", entry.Attributes.Md5), @@ -51,6 +53,13 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) return } + srcPath := util.FullPath(fmt.Sprintf("%s/%s%s", s3a.option.BucketsPath, srcObject, srcObject)) + dir, name := srcPath.DirAndName() + _, err = s3a.getEntry(dir, name) + if err != nil { + s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) + return + } if srcBucket == dstBucket && srcObject == dstObject { s3err.WriteErrorResponse(w, s3err.ErrInvalidCopyDest, r) |
