mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-25 22:40:44 +01:00
s3api: reject malformed Range offsets (#10034)
This commit is contained in:
1 parent
888ecc5325
commit
d7860ddf24
2 files changed
+54
-4
No files matched your search
@@ -190,14 +190,22 @@ func (s3a *S3ApiServer) parseAndValidateRange(w http.ResponseWriter, r *http.Req
|
||||
endOffset = totalSize - 1
|
||||
|
||||
if parts[0] != "" {
|
||||
if parsed, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
|
||||
startOffset = parsed
|
||||
parsed, parseErr := strconv.ParseInt(parts[0], 10, 64)
|
||||
if parseErr != nil {
|
||||
w.Header().Set("Content-Range", fmt.Sprintf("bytes */%d", totalSize))
|
||||
s3err.WriteErrorResponse(w, r, s3err.ErrInvalidRange)
|
||||
return 0, 0, false, newStreamErrorWithResponse(fmt.Errorf("invalid range start: %w", parseErr))
|
||||
}
|
||||
startOffset = parsed
|
||||
}
|
||||
if parts[1] != "" {
|
||||
if parsed, err := strconv.ParseInt(parts[1], 10, 64); err == nil {
|
||||
endOffset = parsed
|
||||
parsed, parseErr := strconv.ParseInt(parts[1], 10, 64)
|
||||
if parseErr != nil {
|
||||
w.Header().Set("Content-Range", fmt.Sprintf("bytes */%d", totalSize))
|
||||
s3err.WriteErrorResponse(w, r, s3err.ErrInvalidRange)
|
||||
return 0, 0, false, newStreamErrorWithResponse(fmt.Errorf("invalid range end: %w", parseErr))
|
||||
}
|
||||
endOffset = parsed
|
||||
}
|
||||
|
||||
// Special case: range requests on empty files should return 416
|
||||
|
||||
Reference in new issue
Block a user