소스 검색

Bug 1960: Error when moving or copying file with non-ASCII file name using S3 protocol

https://winscp.net/tracker/1960
(cherry picked from commit e93b8e6c0f8c99c01cdfc6a0be1cc7a4f50b80f5)

Source commit: 5225b8e53040f7957e9e70e3fd75a1e5ffb9263f
Martin Prikryl 4 년 전
부모
커밋
7371608a12
1개의 변경된 파일7개의 추가작업 그리고 3개의 파일을 삭제
  1. 7 3
      libs/libs3/src/request.c

+ 7 - 3
libs/libs3/src/request.c

@@ -399,9 +399,13 @@ static S3Status compose_amz_headers(const RequestParams *params,
         // Add the x-amz-copy-source header
         if (params->copySourceBucketName && params->copySourceBucketName[0]
             && params->copySourceKey && params->copySourceKey[0]) {
-            char bucketKey[S3_MAX_METADATA_SIZE];
-            snprintf(bucketKey, sizeof(bucketKey), "/%s/%s",
-                     params->copySourceBucketName, params->copySourceKey);
+            // WINSCP
+            char bucketKey[1 + S3_MAX_BUCKET_NAME_SIZE + 1 + MAX_URLENCODED_KEY_SIZE + 1];
+            snprintf(bucketKey, 1 + S3_MAX_BUCKET_NAME_SIZE + 1 + 1, "/%s/", params->copySourceBucketName);
+            if (!urlEncode(bucketKey + strlen(bucketKey), params->copySourceKey, S3_MAX_KEY_SIZE, 0))
+            {
+                return S3StatusUriTooLong;
+            }
             append_amz_header(values, 0, "x-amz-copy-source", bucketKey);
         }
         // If byteCount != 0 then we're just copying a range, add header