Skip to content

Commit

Permalink
fix: Changed exceeding range error for the source object in UploadPar…
Browse files Browse the repository at this point in the history
…tCopy action
  • Loading branch information
0x180 committed Jun 20, 2024
1 parent be098d2 commit fe19bfa
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
9 changes: 9 additions & 0 deletions backend/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"crypto/md5"
"encoding/hex"
"fmt"
"net/http"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion backend/posix/posix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
3 changes: 2 additions & 1 deletion tests/integration/tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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
}

Expand Down

0 comments on commit fe19bfa

Please sign in to comment.