mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
fix: validate exclusivity with partNumber regardless of valid Range (#13418)
To mimic an exact AWS S3 behavior this fix is needed.
This commit is contained in:
parent
f8c5c24159
commit
1e117b780a
@ -376,6 +376,12 @@ func (api objectAPIHandlers) getObjectHandler(ctx context.Context, objectAPI Obj
|
|||||||
var rangeErr error
|
var rangeErr error
|
||||||
rangeHeader := r.Header.Get(xhttp.Range)
|
rangeHeader := r.Header.Get(xhttp.Range)
|
||||||
if rangeHeader != "" {
|
if rangeHeader != "" {
|
||||||
|
// Both 'Range' and 'partNumber' cannot be specified at the same time
|
||||||
|
if opts.PartNumber > 0 {
|
||||||
|
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrInvalidRangePartNumber), r.URL)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
rs, rangeErr = parseRequestRangeSpec(rangeHeader)
|
rs, rangeErr = parseRequestRangeSpec(rangeHeader)
|
||||||
// Handle only errInvalidRange. Ignore other
|
// Handle only errInvalidRange. Ignore other
|
||||||
// parse error and treat it as regular Get
|
// parse error and treat it as regular Get
|
||||||
@ -389,12 +395,6 @@ func (api objectAPIHandlers) getObjectHandler(ctx context.Context, objectAPI Obj
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Both 'bytes' and 'partNumber' cannot be specified at the same time
|
|
||||||
if rs != nil && opts.PartNumber > 0 {
|
|
||||||
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrInvalidRangePartNumber), r.URL)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate pre-conditions if any.
|
// Validate pre-conditions if any.
|
||||||
opts.CheckPrecondFn = func(oi ObjectInfo) bool {
|
opts.CheckPrecondFn = func(oi ObjectInfo) bool {
|
||||||
if objectAPI.IsEncryptionSupported() {
|
if objectAPI.IsEncryptionSupported() {
|
||||||
@ -703,6 +703,12 @@ func (api objectAPIHandlers) headObjectHandler(ctx context.Context, objectAPI Ob
|
|||||||
var rs *HTTPRangeSpec
|
var rs *HTTPRangeSpec
|
||||||
rangeHeader := r.Header.Get(xhttp.Range)
|
rangeHeader := r.Header.Get(xhttp.Range)
|
||||||
if rangeHeader != "" {
|
if rangeHeader != "" {
|
||||||
|
// Both 'Range' and 'partNumber' cannot be specified at the same time
|
||||||
|
if opts.PartNumber > 0 {
|
||||||
|
writeErrorResponseHeadersOnly(w, errorCodes.ToAPIErr(ErrInvalidRangePartNumber))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if rs, err = parseRequestRangeSpec(rangeHeader); err != nil {
|
if rs, err = parseRequestRangeSpec(rangeHeader); err != nil {
|
||||||
// Handle only errInvalidRange. Ignore other
|
// Handle only errInvalidRange. Ignore other
|
||||||
// parse error and treat it as regular Get
|
// parse error and treat it as regular Get
|
||||||
@ -716,12 +722,6 @@ func (api objectAPIHandlers) headObjectHandler(ctx context.Context, objectAPI Ob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Both 'bytes' and 'partNumber' cannot be specified at the same time
|
|
||||||
if rs != nil && opts.PartNumber > 0 {
|
|
||||||
writeErrorResponseHeadersOnly(w, errorCodes.ToAPIErr(ErrInvalidRangePartNumber))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set encryption response headers
|
// Set encryption response headers
|
||||||
if objectAPI.IsEncryptionSupported() {
|
if objectAPI.IsEncryptionSupported() {
|
||||||
switch kind, _ := crypto.IsEncrypted(objInfo.UserDefined); kind {
|
switch kind, _ := crypto.IsEncrypted(objInfo.UserDefined); kind {
|
||||||
|
Loading…
Reference in New Issue
Block a user