diff --git a/internal/bucket/lifecycle/expiration.go b/internal/bucket/lifecycle/expiration.go
index 4ba095dca..16a5fd14b 100644
--- a/internal/bucket/lifecycle/expiration.go
+++ b/internal/bucket/lifecycle/expiration.go
@@ -28,6 +28,7 @@ var (
errLifecycleInvalidExpiration = Errorf("Exactly one of Days (positive integer) or Date (positive ISO 8601 format) should be present inside Expiration.")
errLifecycleInvalidDeleteMarker = Errorf("Delete marker cannot be specified with Days or Date in a Lifecycle Expiration Policy")
errLifecycleDateNotMidnight = Errorf("'Date' must be at midnight GMT")
+ errLifecycleInvalidDeleteAll = Errorf("Days (positive integer) should be present inside Expiration with ExpiredObjectAllVersions.")
)
// ExpirationDays is a type alias to unmarshal Days in Expiration
@@ -186,6 +187,11 @@ func (e Expiration) Validate() error {
return errLifecycleInvalidExpiration
}
+ // DeleteAll set without expiration days
+ if e.DeleteAll.set && e.IsDaysNull() {
+ return errLifecycleInvalidDeleteAll
+ }
+
return nil
}
diff --git a/internal/bucket/lifecycle/expiration_test.go b/internal/bucket/lifecycle/expiration_test.go
index 50cfd7b68..76cac74d2 100644
--- a/internal/bucket/lifecycle/expiration_test.go
+++ b/internal/bucket/lifecycle/expiration_test.go
@@ -106,7 +106,7 @@ func TestInvalidExpiration(t *testing.T) {
2019-04-20T00:00:00Z
true
`,
- expectedErr: nil,
+ expectedErr: errLifecycleInvalidDeleteAll,
},
}
for i, tc := range validationTestCases {