mirror of
				https://github.com/minio/minio.git
				synced 2025-10-29 15:55:00 -04:00 
			
		
		
		
	URL Encode X-Amz-Copy-Source as per the spec (#2114)
The documents for COPY state that the X-Amz-Copy-Source must be URL encoded. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html
This commit is contained in:
		
							parent
							
								
									a51bb1d728
								
							
						
					
					
						commit
						8c767218a4
					
				| @ -48,7 +48,7 @@ func registerAPIRouter(mux *router.Router, api objectAPIHandlers) { | ||||
| 	// GetObject | ||||
| 	bucket.Methods("GET").Path("/{object:.+}").HandlerFunc(api.GetObjectHandler) | ||||
| 	// CopyObject | ||||
| 	bucket.Methods("PUT").Path("/{object:.+}").HeadersRegexp("X-Amz-Copy-Source", ".*?(\\/).*?").HandlerFunc(api.CopyObjectHandler) | ||||
| 	bucket.Methods("PUT").Path("/{object:.+}").HeadersRegexp("X-Amz-Copy-Source", ".*?(\\/|%2F).*?").HandlerFunc(api.CopyObjectHandler) | ||||
| 	// PutObject | ||||
| 	bucket.Methods("PUT").Path("/{object:.+}").HandlerFunc(api.PutObjectHandler) | ||||
| 	// DeleteObject | ||||
|  | ||||
| @ -337,11 +337,14 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO: Reject requests where body/payload is present, for now we | ||||
| 	// don't even read it. | ||||
| 	// TODO: Reject requests where body/payload is present, for now we don't even read it. | ||||
| 
 | ||||
| 	// objectSource | ||||
| 	objectSource := r.Header.Get("X-Amz-Copy-Source") | ||||
| 	objectSource, err := url.QueryUnescape(r.Header.Get("X-Amz-Copy-Source")) | ||||
| 	if err != nil { | ||||
| 		// Save unescaped string as is. | ||||
| 		objectSource = r.Header.Get("X-Amz-Copy-Source") | ||||
| 	} | ||||
| 
 | ||||
| 	// Skip the first element if it is '/', split the rest. | ||||
| 	if strings.HasPrefix(objectSource, "/") { | ||||
|  | ||||
| @ -27,6 +27,7 @@ import ( | ||||
| 	"io/ioutil" | ||||
| 	"math/rand" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| 
 | ||||
| @ -689,7 +690,7 @@ func (s *TestSuiteCommon) TestCopyObject(c *C) { | ||||
| 	request, err = newTestRequest("PUT", getPutObjectURL(s.endPoint, bucketName, objectName2), | ||||
| 		0, nil, s.accessKey, s.secretKey) | ||||
| 	// setting the "X-Amz-Copy-Source" to allow copying the content of previously uploaded object. | ||||
| 	request.Header.Set("X-Amz-Copy-Source", "/"+bucketName+"/"+objectName) | ||||
| 	request.Header.Set("X-Amz-Copy-Source", url.QueryEscape("/"+bucketName+"/"+objectName)) | ||||
| 	c.Assert(err, IsNil) | ||||
| 	// execute the HTTP request. | ||||
| 	// the content is expected to have the content of previous disk. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user