Skip to content

Commit 04b8e96

Browse files
committed
add more validation for lifecycle
Signed-off-by: Utkarsh Srivastava <srivastavautkarsh8097@gmail.com>
1 parent 138b236 commit 04b8e96

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/endpoint/s3/ops/s3_put_bucket_lifecycle.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ async function put_bucket_lifecycle(req) {
141141
days_after_initiation: parse_lifecycle_field(rule.AbortIncompleteMultipartUpload[0].DaysAfterInitiation),
142142
}, _.isUndefined);
143143
reject_empty_field(current_rule.abort_incomplete_multipart_upload);
144+
145+
if (current_rule.abort_incomplete_multipart_upload?.days_after_initiation === undefined) {
146+
throw new S3Error(S3Error.InvalidArgument);
147+
}
148+
if (current_rule.abort_incomplete_multipart_upload?.days_after_initiation < 1) {
149+
throw new S3Error({
150+
...S3Error.InvalidArgument,
151+
detail: 'when calling the PutBucketLifecycleConfiguration operation: \'DaysAfterInitiation\' for AbortIncompleteMultipartUpload action must be a positive integer',
152+
});
153+
}
144154
}
145155

146156
if (rule.Transition?.length === 1) {
@@ -158,6 +168,16 @@ async function put_bucket_lifecycle(req) {
158168
newer_noncurrent_versions: parse_lifecycle_field(rule.NoncurrentVersionExpiration[0].NewerNoncurrentVersions),
159169
}, _.isUndefined);
160170
reject_empty_field(current_rule.noncurrent_version_expiration);
171+
172+
if (current_rule.noncurrent_version_expiration?.noncurrent_days === undefined) {
173+
throw new S3Error(S3Error.InvalidArgument);
174+
}
175+
if (current_rule.noncurrent_version_expiration?.noncurrent_days < 1) {
176+
throw new S3Error({
177+
...S3Error.InvalidArgument,
178+
detail: 'when calling the PutBucketLifecycleConfiguration operation: \'NoncurrentDays\' for NoncurrentVersionExpiration action must be a positive integer',
179+
});
180+
}
161181
}
162182

163183
if (rule.NoncurrentVersionTransition?.length === 1) {

src/test/unit_tests/test_lifecycle.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ mocha.describe('lifecycle', () => {
254254
mocha.it('basic test cleanup abandoned multipart upload', async function() {
255255
const bucket = multipart_bucket;
256256
const key = 'test-lifecycle-multipart-basic-0';
257-
const parts_age = 3;
257+
const parts_age = 30;
258258
const parts_count = 7;
259259
const part_size = 45;
260260

@@ -296,7 +296,7 @@ mocha.describe('lifecycle', () => {
296296
mocha.it('test cleanup abandoned multipart upload with prefix', async function() {
297297
const bucket = multipart_bucket;
298298
const prefix = 'test-lifecycle-multipart-with-prefix-';
299-
const parts_age = 3;
299+
const parts_age = 30;
300300
const parts_count = 7;
301301
const part_size = 45;
302302

0 commit comments

Comments
 (0)