From 20b763d6325ad91a2bfe1af916018c88b8d719a0 Mon Sep 17 00:00:00 2001 From: chrislu Date: Tue, 18 Nov 2025 21:32:27 -0800 Subject: [PATCH] handling invalid ranges --- weed/s3api/s3api_object_handlers_copy.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/weed/s3api/s3api_object_handlers_copy.go b/weed/s3api/s3api_object_handlers_copy.go index c69bb36f5..53e54f73d 100644 --- a/weed/s3api/s3api_object_handlers_copy.go +++ b/weed/s3api/s3api_object_handlers_copy.go @@ -508,9 +508,15 @@ func (s3a *S3ApiServer) CopyObjectPartHandler(w http.ResponseWriter, r *http.Req } // Create new entry for the part + // Calculate part size, avoiding underflow for invalid ranges + partSize := uint64(0) + if endOffset >= startOffset { + partSize = uint64(endOffset - startOffset + 1) + } + dstEntry := &filer_pb.Entry{ Attributes: &filer_pb.FuseAttributes{ - FileSize: uint64(endOffset - startOffset + 1), + FileSize: partSize, Mtime: time.Now().Unix(), Crtime: time.Now().Unix(), Mime: entry.Attributes.Mime, @@ -520,7 +526,8 @@ func (s3a *S3ApiServer) CopyObjectPartHandler(w http.ResponseWriter, r *http.Req // Handle zero-size files or empty ranges if entry.Attributes.FileSize == 0 || endOffset < startOffset { - // For zero-size files or invalid ranges, create an empty part + // For zero-size files or invalid ranges, create an empty part with size 0 + dstEntry.Attributes.FileSize = 0 dstEntry.Chunks = nil } else { // Copy chunks that overlap with the range