From fe19bfaed9c7faf77a67e27858fc888ddea263a5 Mon Sep 17 00:00:00 2001 From: jonaustin09 Date: Thu, 20 Jun 2024 14:12:03 -0400 Subject: [PATCH] fix: Changed exceeding range error for the source object in UploadPartCopy action --- backend/common.go | 9 +++++++++ backend/posix/posix.go | 2 +- tests/integration/tests.go | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/common.go b/backend/common.go index 7634101d..42c449c6 100644 --- a/backend/common.go +++ b/backend/common.go @@ -18,6 +18,7 @@ import ( "crypto/md5" "encoding/hex" "fmt" + "net/http" "strconv" "strings" "time" @@ -98,6 +99,14 @@ func ParseRange(size int64, acceptRange string) (int64, int64, error) { return startOffset, endOffset - startOffset + 1, nil } +func CreateExceedingRangeErr(objSize int64) s3err.APIError { + return s3err.APIError{ + Code: "InvalidArgument", + Description: fmt.Sprintf("Range specified is not valid for source object of size: %d", objSize), + HTTPStatusCode: http.StatusBadRequest, + } +} + func GetMultipartMD5(parts []types.CompletedPart) string { var partsEtagBytes []byte for _, part := range parts { diff --git a/backend/posix/posix.go b/backend/posix/posix.go index 59b97d49..65201fbe 100644 --- a/backend/posix/posix.go +++ b/backend/posix/posix.go @@ -1209,7 +1209,7 @@ func (p *Posix) UploadPartCopy(ctx context.Context, upi *s3.UploadPartCopyInput) } if startOffset+length > fi.Size()+1 { - return s3response.CopyObjectResult{}, s3err.GetAPIError(s3err.ErrInvalidRange) + return s3response.CopyObjectResult{}, backend.CreateExceedingRangeErr(fi.Size()) } f, err := p.openTmpFile(filepath.Join(*upi.Bucket, objdir), diff --git a/tests/integration/tests.go b/tests/integration/tests.go index f40e58ed..4b8dc588 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -31,6 +31,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" + "github.com/versity/versitygw/backend" "github.com/versity/versitygw/s3err" "github.com/versity/versitygw/s3response" ) @@ -5149,7 +5150,7 @@ func UploadPartCopy_greater_range_than_obj_size(s *S3Conf) error { PartNumber: &partNumber, }) cancel() - if err := checkApiErr(err, s3err.GetAPIError(s3err.ErrInvalidRange)); err != nil { + if err := checkApiErr(err, backend.CreateExceedingRangeErr(int64(srcObjSize))); err != nil { return err }