From c1b823459610b6ac40f53179d3a19594c21eb4fb Mon Sep 17 00:00:00 2001 From: Ka-Hing Cheung Date: Fri, 8 May 2015 15:46:25 -0700 Subject: [PATCH] decode before splitting --- src/main/java/org/gaul/s3proxy/S3ProxyHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 017ac87..a6416da 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -986,13 +986,14 @@ final class S3ProxyHandler extends AbstractHandler { String destContainerName, String destBlobName) throws IOException, S3Exception { String copySourceHeader = request.getHeader("x-amz-copy-source"); + copySourceHeader = URLDecoder.decode(copySourceHeader, "UTF-8"); if (copySourceHeader.startsWith("/")) { // Some clients like boto do not include the leading slash copySourceHeader = copySourceHeader.substring(1); } String[] path = copySourceHeader.split("/", 2); - for (int i = 0; i < path.length; i++) { - path[i] = URLDecoder.decode(path[i], "UTF-8"); + if (path.length != 2) { + throw new S3Exception(S3ErrorCode.INVALID_REQUEST); } String sourceContainerName = path[0]; String sourceBlobName = path[1];