fix: reject an empty start-after and continuation-token in ListObjects (V1)
This commit is contained in:
1 parent
613c71290f
commit
276128b42b
4 files changed
+83
-16
No files matched your search
@@ -195,9 +195,9 @@ func ListObjects_invalid_max_keys(s *S3Conf) error {
|
||||
})
|
||||
}
|
||||
|
||||
// start-after belongs to ListObjectsV2, so S3 rejects it on a V1 listing
|
||||
// instead of ignoring it. The SDK ListObjects input has no StartAfter field,
|
||||
// so the request is signed and sent by hand.
|
||||
// start-after and continuation-token belong to ListObjectsV2, so S3 rejects
|
||||
// either one on a V1 listing, with or without a value. The SDK ListObjects
|
||||
// input has neither field, so the requests are signed and sent by hand.
|
||||
func ListObjects_start_after(s *S3Conf) error {
|
||||
testName := "ListObjects_start_after"
|
||||
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
@@ -206,19 +206,36 @@ func ListObjects_start_after(s *S3Conf) error {
|
||||
return err
|
||||
}
|
||||
|
||||
req, err := createSignedReq(http.MethodGet, s.endpoint,
|
||||
fmt.Sprintf("%v?start-after=bar", bucket),
|
||||
s.awsID, s.awsSecret, "s3", s.awsRegion, "", nil, time.Now(), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
startAfterErr := s3err.GetInvalidArgumentErr(s3err.InvalidArgStartAfter, "")
|
||||
contTokenErr := s3err.GetInvalidArgumentErr(s3err.InvalidArgContinuationToken, "")
|
||||
for _, test := range []struct {
|
||||
query string
|
||||
expected s3err.S3Error
|
||||
}{
|
||||
{"start-after=bar", startAfterErr},
|
||||
{"start-after=", startAfterErr},
|
||||
{"start-after", startAfterErr},
|
||||
{"continuation-token=bar", contTokenErr},
|
||||
{"continuation-token=", contTokenErr},
|
||||
} {
|
||||
req, err := createSignedReq(http.MethodGet, s.endpoint,
|
||||
fmt.Sprintf("%v?%v", bucket, test.query),
|
||||
s.awsID, s.awsSecret, "s3", s.awsRegion, "", nil, time.Now(), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resp, err := s.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := checkHTTPResponseApiErr(resp, test.expected); err != nil {
|
||||
return fmt.Errorf("%v: %w", test.query, err)
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := s.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return checkHTTPResponseApiErr(resp, s3err.GetInvalidArgumentErr(s3err.InvalidArgStartAfter, ""))
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user