Describe the bug
If you send an S3 ListMultipartUploads command with the encoding-type=url query set, an example of what should be returned with a key such as {space}-D55FB12D-E545-4EEE-A5A1-1F5A084FFB51(test)+ is:
<?xml version="1.0" encoding="UTF-8"?>
<ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Bucket>versity-gwtest-bucket-luke-four-2-54e951d0-a52f-4cc9-b6ea-d3aee</Bucket><KeyMarker></KeyMarker><UploadIdMarker></UploadIdMarker><NextKeyMarker>+-2F534CD4-8747-47AC-A46A-962A810E9716%28test%29%2B</NextKeyMarker><NextUploadIdMarker>DFfIGxhgIkUaIAfJ18VZ01Bd5FZaZTMlvx6Gf4LS.8UOMXyJPq6bljyk7pXEP7BxxjR5Iduiej0AjLYZyz5OsA3gxJDe38sRDdziv7g37nC5uaGv96ijfRuBKktAY9qX</NextUploadIdMarker><MaxUploads>1000</MaxUploads><EncodingType>url</EncodingType><IsTruncated>false</IsTruncated><Upload><Key>+-2F534CD4-8747-47AC-A46A-962A810E9716%28test%29%2B</Key><UploadId>DFfIGxhgIkUaIAfJ18VZ01Bd5FZaZTMlvx6Gf4LS.8UOMXyJPq6bljyk7pXEP7BxxjR5Iduiej0AjLYZyz5OsA3gxJDe38sRDdziv7g37nC5uaGv96ijfRuBKktAY9qX</UploadId><Initiator><ID>arn:aws:iam::020783140448:user/s3user</ID><DisplayName>s3user</DisplayName></Initiator><Owner><ID>6cf4ba6d24167d9655e8fcd86ca28fdab32c18c99169cbfeb3efe00ff8f4d2ae</ID></Owner><StorageClass>STANDARD</StorageClass><Initiated>2026-05-25T19:16:46.000Z</Initiated></Upload></ListMultipartUploadsResult>
Note the URL encoding for the Key. In versitygw, this query does nothing. Also, an encoding-type besides url should return:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidArgument</Code><Message>Invalid Encoding Method specified in Request</Message><ArgumentName>encoding-type</ArgumentName><ArgumentValue>abc</ArgumentValue><RequestId>56FGJ9NE7BW9JF45</RequestId><HostId>tfFVN5JH4HLjILr/iASEaWERS8uiYXFpU5Up76DlSiQ4e0rtmcQmc1zPmbS9P2T4BSPbyRImnrc=</HostId></Error>
To Reproduce
- Start versitygw, e.g.:
./versitygw --access=AKIA**** --secret=******** --region=us-east-1 --cert /Users/lukemccrone/devel/versitygw/cert.pem --key /Users/lukemccrone/devel/versitygw/versitygw.pem posix --versioning-dir /tmp/versioning /tmp/gw
- Create bucket, e.g.:
curl -ks -w %{http_code} -X PUT https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9 -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=01fc233058126e9c2a3b6bb254136f730b8b277e195a581cdab7443f3bac2781 -H host: localhost:7070 -H x-amz-content-sha256: UNSIGNED-PAYLOAD -H x-amz-date: 20260525T193008Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-9D87751D-E50E-4464-AF97-9D6C8F16D65F
- Create a multipart upload, e.g.:
curl -ksi -X POST https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9/%20-5C131BAB-CC76-4133-BBC8-022F1706E64F%28test%29%2B?uploads= -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=9443303ab5b9e78b5634e0b5ac6be59461ee8dcb6d3d8f152d9f19e7e9d9c6b9 -H host: localhost:7070 -H x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -H x-amz-date: 20260525T193009Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-2946BE37-43E7-4B71-9772-67388AE2B4D3
- Attempt to list the upload with
encoding-type=url, e.g.: curl -ksi https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9?encoding-type=url&uploads= -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=aee72888b5af8a5d467c1e2dd6ae586a52c0a02358ffcdd491fff7370c91b708 -H host: localhost:7070 -H x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -H x-amz-date: 20260525T193010Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-F10B93F6-3D51-480E-AC34-C4D41B7DE1F1
Expected behavior
Same as S3 (key is returned in URL format).
Server Version
Version : v1.4.1
Build : 3cd39a8
BuildTime: 2026-05-25_05:22:57PM
Darwin Lukes-MacBook-Pro.local 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:28:30 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6030 arm64
Describe the bug
If you send an S3 ListMultipartUploads command with the
encoding-type=urlquery set, an example of what should be returned with a key such as{space}-D55FB12D-E545-4EEE-A5A1-1F5A084FFB51(test)+is:Note the URL encoding for the
Key. In versitygw, this query does nothing. Also, anencoding-typebesidesurlshould return:To Reproduce
./versitygw --access=AKIA**** --secret=******** --region=us-east-1 --cert /Users/lukemccrone/devel/versitygw/cert.pem --key /Users/lukemccrone/devel/versitygw/versitygw.pem posix --versioning-dir /tmp/versioning /tmp/gwcurl -ks -w %{http_code} -X PUT https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9 -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=01fc233058126e9c2a3b6bb254136f730b8b277e195a581cdab7443f3bac2781 -H host: localhost:7070 -H x-amz-content-sha256: UNSIGNED-PAYLOAD -H x-amz-date: 20260525T193008Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-9D87751D-E50E-4464-AF97-9D6C8F16D65Fcurl -ksi -X POST https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9/%20-5C131BAB-CC76-4133-BBC8-022F1706E64F%28test%29%2B?uploads= -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=9443303ab5b9e78b5634e0b5ac6be59461ee8dcb6d3d8f152d9f19e7e9d9c6b9 -H host: localhost:7070 -H x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -H x-amz-date: 20260525T193009Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-2946BE37-43E7-4B71-9772-67388AE2B4D3encoding-type=url, e.g.:curl -ksi https://localhost:7070/versity-gwtest-bucket-one-1-5507e515-6099-4a5f-b8e3-ba5573742c9?encoding-type=url&uploads= -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260525/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=aee72888b5af8a5d467c1e2dd6ae586a52c0a02358ffcdd491fff7370c91b708 -H host: localhost:7070 -H x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -H x-amz-date: 20260525T193010Z -o /Users/lukemccrone/devel/versitygw/versity-gwtest-files/test-file-F10B93F6-3D51-480E-AC34-C4D41B7DE1F1Expected behavior
Same as S3 (key is returned in URL format).
Server Version
Version : v1.4.1
Build : 3cd39a8
BuildTime: 2026-05-25_05:22:57PM
Darwin Lukes-MacBook-Pro.local 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:28:30 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6030 arm64