diff --git a/internal/bucket/lifecycle/expiration.go b/internal/bucket/lifecycle/expiration.go
index 064595e1e..4ba095dca 100644
--- a/internal/bucket/lifecycle/expiration.go
+++ b/internal/bucket/lifecycle/expiration.go
@@ -177,7 +177,7 @@ func (e Expiration) Validate() error {
return errLifecycleInvalidDeleteMarker
}
- if !e.DeleteMarker.set && e.IsDaysNull() && e.IsDateNull() {
+ if !e.DeleteMarker.set && !e.DeleteAll.set && e.IsDaysNull() && e.IsDateNull() {
return errXMLNotWellFormed
}
diff --git a/internal/bucket/lifecycle/expiration_test.go b/internal/bucket/lifecycle/expiration_test.go
index 6d632194e..50cfd7b68 100644
--- a/internal/bucket/lifecycle/expiration_test.go
+++ b/internal/bucket/lifecycle/expiration_test.go
@@ -94,6 +94,20 @@ func TestInvalidExpiration(t *testing.T) {
`,
expectedErr: errLifecycleInvalidDeleteMarker,
},
+ { // Expiration with a valid number of days and ExpiredObjectAllVersions
+ inputXML: `
+ 3
+ true
+ `,
+ expectedErr: nil,
+ },
+ { // Expiration with a valid ISO 8601 date and ExpiredObjectAllVersions
+ inputXML: `
+ 2019-04-20T00:00:00Z
+ true
+ `,
+ expectedErr: nil,
+ },
}
for i, tc := range validationTestCases {
t.Run(fmt.Sprintf("Test %d", i+1), func(t *testing.T) {