aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/s3api/filer_multipart.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
index 3cf0971f6..f8027c7ee 100644
--- a/weed/s3api/filer_multipart.go
+++ b/weed/s3api/filer_multipart.go
@@ -90,6 +90,25 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
return nil, s3err.ErrNoSuchUpload
}
+ // check whether completedParts is more than received parts
+ {
+ partNumbers := make(map[int]struct{}, len(entries))
+ for _, entry := range entries {
+ if strings.HasSuffix(entry.Name, ".part") && !entry.IsDirectory {
+ partNumberString := entry.Name[:len(entry.Name)-len(".part")]
+ partNumber, err := strconv.Atoi(partNumberString)
+ if err == nil {
+ partNumbers[partNumber] = struct{}{}
+ }
+ }
+ }
+ for _, part := range completedParts {
+ if _, found := partNumbers[part.PartNumber]; !found {
+ return nil, s3err.ErrInvalidPart
+ }
+ }
+ }
+
mime := pentry.Attributes.Mime
var finalParts []*filer_pb.FileChunk