fix: validate object lock default retention upper limits

Fixes #2187

Enforce maximum default retention periods when parsing PutObjectLockConfiguration requests. Reject Days values greater than 36500 and Years values greater than 100 with InvalidArgument errors.
This commit is contained in:
niksis02
2026-06-16 22:48:51 +04:00
parent 4d391cabc8
commit 67af0afa81
3 changed files with 75 additions and 29 deletions
+11
View File
@@ -35,6 +35,11 @@ type BucketLockConfig struct {
CreatedAt *time.Time
}
const (
maxObjectLockRetentionDays int32 = 36500
maxObjectLockRetentionYears int32 = 100
)
func ParseBucketLockConfigurationInput(input []byte) ([]byte, error) {
var lockConfig types.ObjectLockConfiguration
if err := xml.Unmarshal(input, &lockConfig); err != nil {
@@ -62,9 +67,15 @@ func ParseBucketLockConfigurationInput(input []byte) ([]byte, error) {
if retention.Days != nil && *retention.Days <= 0 {
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionDays, fmt.Sprint(*retention.Days))
}
if retention.Days != nil && *retention.Days > maxObjectLockRetentionDays {
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionDaysTooLarge, fmt.Sprint(*retention.Days))
}
if retention.Years != nil && *retention.Years <= 0 {
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionYears, fmt.Sprint(*retention.Years))
}
if retention.Years != nil && *retention.Years > maxObjectLockRetentionYears {
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionYearsTooLarge, fmt.Sprint(*retention.Years))
}
config.DefaultRetention = retention
now := time.Now()