Commit Graph
18 Commits
Author SHA1 Message Date
dualfroz 08d5acf963 fix: report the last upload in ListMultipartUploads next markers on a single page
NextKeyMarker and NextUploadIdMarker were only set for a truncated
listing, so a ListMultipartUploads response that fit in one page
returned them empty. S3 still sets them to the key and upload ID of
the last upload in the response.

Fill both markers from the last listed upload when the listing is not
truncated, including the case where the page ends exactly at
max-uploads. A page of common prefixes only keeps them empty, as
before. Enable the REST test that covers it.

Fixes #2144
2026-10-03 17:46:31 +02:00
upstream f12ba37b26 Upstream versity/versitygw state of the touched files before 95a6da83b9 2026-10-02 16:09:06 +02:00
dualfroz b7ff97181d fix: validate and apply the ListBuckets bucket-region query
ListBuckets ignored bucket-region: a value that is not a region was
accepted, and a region other than the gateway one still listed every
bucket. S3 rejects an invalid value with 400 InvalidArgument, "Argument
value abc is not a valid AWS Region", and lists only the buckets of the
requested region.

Check bucket-region against the AWS region code format, always
accepting the gateway region whatever its name, and return an empty
list for any other region, since every bucket lives in the gateway
region. Enable the REST tests that cover both cases.

Fixes #1923
Fixes #1930
2026-10-05 20:42:18 +02:00
upstream 2bb327ec69 Upstream versity/versitygw state of the touched files before aaf73219cd 2026-10-02 16:07:01 +02:00
dualfroz 62d77006d2 fix: return MalformedXML for a DeleteObjects request without objects
A DeleteObjects request whose Delete element names no objects was
answered with 200 and an empty DeleteResult. S3 rejects it with
MalformedXML, as the schema requires at least one Object.

Reject the empty list right after the body is parsed, next to the
1000 key limit check. Update the unit and integration tests that
expected the empty result and enable the REST test that covers it.

Fixes #2109
2026-10-03 16:01:57 +02:00
upstream edbb6c2d74 Upstream versity/versitygw state of the touched files before 63922ed89d 2026-10-02 16:02:57 +02:00
dualfroz 5f0e2e55ba fix: reject ListMultipartUploads requests that also carry uploadId
A bucket GET with both the uploads and uploadId query parameters was
routed to ListMultipartUploads and answered with the upload listing.
S3 rejects the combination with 400 InvalidArgument, "Conflicting query
string parameters: uploadId, uploads".

Add an error route for the combination ahead of ListMultipartUploads,
the way the object level '?uploads' request is rejected, and enable
the REST test that covers it.

Fixes #2155
2026-10-05 09:46:37 +02:00
upstream 6704314fea Upstream versity/versitygw state of the touched files before eecdc6b996 2026-10-02 16:01:08 +02:00
dualfroz e0fef79b7b fix: return InvalidURI for a malformed escape in the request path
A request path with an invalid percent escape, such as "/bucket/%zz",
failed url.PathUnescape in the DecodeURL middleware and the raw error
was answered with 500 InternalError. S3 rejects such a request with
400 InvalidURI.

Return InvalidURI from DecodeURL, so the s3 and admin routers answer
with it as well, and let the website handler pass the error through
instead of mapping it on its own.

Fixes #2070
2026-10-03 15:13:16 +02:00
upstream 59493b527e Upstream versity/versitygw state of the touched files before 5d5ee06ee6 2026-10-02 15:59:21 +02:00
dualfroz 1d06fadbbd Merge pull request #2389 from dualfroz/fix-illegal-location-constraint
Return IllegalLocationConstraintException for a mismatched LocationConstraint
2026-09-14 15:03:16 -07:00
upstream efecf29ac0 Upstream versity/versitygw state of the touched files before 91e4790870 2026-09-15 00:03:16 +02:00
dualfroz d5ed12db2b move location constraint validation to s3api/utils 2026-09-14 20:29:22 +02:00
upstream 87a4aee115 Upstream versity/versitygw state of the touched files before caf29a97fa 2026-09-14 20:28:40 +02:00
dualfroz 9abdd46f7b test: send the location constraint when creating buckets outside us-east-1 2026-09-14 02:17:22 +02:00
upstream 5207fe5e36 Upstream versity/versitygw state of the touched files before 61e5eb836d 2026-09-14 02:17:22 +02:00
dualfroz 2742fc2216 fix: return IllegalLocationConstraintException for a mismatched LocationConstraint
A region specific endpoint requires CreateBucket to name that same region
in `LocationConstraint`. The gateway reported a mismatch as
`InvalidLocationConstraint`, which AWS reserves for a constraint that is
not a valid location at all, and accepted a request that omitted the
constraint entirely.

Keep `InvalidLocationConstraint` for the global `us-east-1` endpoint,
which takes no constraint, and return
`IllegalLocationConstraintException` when a region specific endpoint gets
a constraint naming another region, or none.

Fixes #2246
2026-09-13 15:08:58 +02:00
upstream 2a5705ab02 Upstream versity/versitygw state of the touched files before b237f0cf7a 2026-09-11 23:12:57 +02:00