Merge pull request #1997 from versity/sis/copyobject-threshold

fix: enforce 5gb copy source object size threshold.
This commit is contained in:
Ben McClelland
2026-03-31 12:27:11 -07:00
committed by GitHub
17 changed files with 124 additions and 15 deletions
+1 -1
View File
@@ -681,7 +681,7 @@ func TestAdminController_CreateBucket(t *testing.T) {
},
}
s3api := New(be, iam, nil, nil, nil, false, false, "")
s3api := New(be, iam, nil, nil, nil, false, false, "", 10000)
ctrl := AdminController{
iam: iam,
+3 -1
View File
@@ -38,6 +38,7 @@ type S3ApiController struct {
logger s3log.AuditLogger
evSender s3event.S3EventSender
mm metrics.Manager
mpMaxParts int
readonly bool
disableACL bool
virtualDomain string
@@ -60,7 +61,7 @@ var (
xmlhdr = []byte(`<?xml version="1.0" encoding="UTF-8"?>` + "\n")
)
func New(be backend.Backend, iam auth.IAMService, logger s3log.AuditLogger, evs s3event.S3EventSender, mm metrics.Manager, readonly, disableACL bool, virtualDomain string) S3ApiController {
func New(be backend.Backend, iam auth.IAMService, logger s3log.AuditLogger, evs s3event.S3EventSender, mm metrics.Manager, readonly, disableACL bool, virtualDomain string, mpMaxParts int) S3ApiController {
return S3ApiController{
be: be,
iam: iam,
@@ -70,6 +71,7 @@ func New(be backend.Backend, iam auth.IAMService, logger s3log.AuditLogger, evs
mm: mm,
disableACL: disableACL,
virtualDomain: virtualDomain,
mpMaxParts: mpMaxParts,
}
}
+1 -1
View File
@@ -282,7 +282,7 @@ func (c S3ApiController) UploadPart(ctx *fiber.Ctx) (*Response, error) {
}, err
}
if partNumber < minPartNumber || partNumber > maxPartNumber {
if partNumber < minPartNumber || partNumber > int32(c.mpMaxParts) {
debuglogger.Logf("invalid part number: %d", partNumber)
return &Response{
MetaOpts: &MetaOptions{
+2 -1
View File
@@ -607,7 +607,8 @@ func TestS3ApiController_UploadPart(t *testing.T) {
}
ctrl := S3ApiController{
be: be,
be: be,
mpMaxParts: 10000,
}
testController(
+2 -1
View File
@@ -42,10 +42,11 @@ type S3ApiRouter struct {
region string
virtualDomain string
corsAllowOrigin string
mpMaxParts int
}
func (sa *S3ApiRouter) Init() {
ctrl := controllers.New(sa.be, sa.iam, sa.logger, sa.evs, sa.mm, sa.readonly, sa.disableACL, sa.virtualDomain)
ctrl := controllers.New(sa.be, sa.iam, sa.logger, sa.evs, sa.mm, sa.readonly, sa.disableACL, sa.virtualDomain, sa.mpMaxParts)
sa.Ctrl = ctrl
adminServices := &controllers.Services{
Logger: sa.aLogger,
+5
View File
@@ -175,6 +175,11 @@ func WithReadOnly() Option {
return func(s *S3ApiServer) { s.Router.readonly = true }
}
// WithMpMaxParts sets the maximum number of parts allowed in a multipart upload.
func WithMpMaxParts(n int) Option {
return func(s *S3ApiServer) { s.Router.mpMaxParts = n }
}
// WithHostStyle enabled host-style bucket addressing on the server
func WithHostStyle(virtualDomain string) Option {
return func(s *S3ApiServer) {