return InvalidRequest when no parts are provided (#17395)

This commit is contained in:
Harshavardhana 2023-06-10 21:59:51 -07:00 committed by GitHub
parent 91987d6f7a
commit 43468f4d47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 257 additions and 249 deletions

View File

@ -149,6 +149,7 @@ const (
ErrMethodNotAllowed ErrMethodNotAllowed
ErrInvalidPart ErrInvalidPart
ErrInvalidPartOrder ErrInvalidPartOrder
ErrMissingPart
ErrAuthorizationHeaderMalformed ErrAuthorizationHeaderMalformed
ErrMalformedPOSTRequest ErrMalformedPOSTRequest
ErrPOSTFileRequired ErrPOSTFileRequired
@ -686,6 +687,11 @@ var errorCodes = errorCodeMap{
Description: "One or more of the specified parts could not be found. The part may not have been uploaded, or the specified entity tag may not match the part's entity tag.", Description: "One or more of the specified parts could not be found. The part may not have been uploaded, or the specified entity tag may not match the part's entity tag.",
HTTPStatusCode: http.StatusBadRequest, HTTPStatusCode: http.StatusBadRequest,
}, },
ErrMissingPart: {
Code: "InvalidRequest",
Description: "You must specify at least one part",
HTTPStatusCode: http.StatusBadRequest,
},
ErrInvalidPartOrder: { ErrInvalidPartOrder: {
Code: "InvalidPartOrder", Code: "InvalidPartOrder",
Description: "The list of parts was not in ascending order. The parts list must be specified in order by part number.", Description: "The list of parts was not in ascending order. The parts list must be specified in order by part number.",

File diff suppressed because one or more lines are too long

View File

@ -878,12 +878,6 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
return return
} }
// Content-Length is required and should be non-zero
if r.ContentLength <= 0 {
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMissingContentLength), r.URL)
return
}
// Get upload id. // Get upload id.
uploadID, _, _, _, s3Error := getObjectResources(r.Form) uploadID, _, _, _, s3Error := getObjectResources(r.Form)
if s3Error != ErrNone { if s3Error != ErrNone {
@ -891,15 +885,22 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
return return
} }
// Content-Length is required and should be non-zero
if r.ContentLength <= 0 {
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMissingPart), r.URL)
return
}
complMultipartUpload := &CompleteMultipartUpload{} complMultipartUpload := &CompleteMultipartUpload{}
if err = xmlDecoder(r.Body, complMultipartUpload, r.ContentLength); err != nil { if err = xmlDecoder(r.Body, complMultipartUpload, r.ContentLength); err != nil {
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL) writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
return return
} }
if len(complMultipartUpload.Parts) == 0 { if len(complMultipartUpload.Parts) == 0 {
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMalformedXML), r.URL) writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMissingPart), r.URL)
return return
} }
if !sort.SliceIsSorted(complMultipartUpload.Parts, func(i, j int) bool { if !sort.SliceIsSorted(complMultipartUpload.Parts, func(i, j int) bool {
return complMultipartUpload.Parts[i].PartNumber < complMultipartUpload.Parts[j].PartNumber return complMultipartUpload.Parts[i].PartNumber < complMultipartUpload.Parts[j].PartNumber
}) { }) {