Skip to content

[Bug] - REST ListMultipartUploads - encoding-type query isn't honored #2156

@lrm25

Description

@lrm25

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

  1. 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
  2. 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
  3. 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
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions