fix: lifecycle XML parsing errors with Versioning (#9974)

This commit is contained in:
Anis Elleuch
2020-07-05 17:08:42 +01:00
committed by GitHub
parent d4af132fc4
commit 4cf80f96ad
4 changed files with 10 additions and 23 deletions

View File

@@ -108,26 +108,13 @@ type Expiration struct {
DeleteMarker ExpireDeleteMarker `xml:"ExpiredObjectDeleteMarker,omitempty"`
}
// UnmarshalXML parses delete marker and validates if it is set.
func (b *ExpireDeleteMarker) UnmarshalXML(d *xml.Decoder, startElement xml.StartElement) error {
if !*b {
return nil
}
var deleteMarker bool
err := d.DecodeElement(&deleteMarker, &startElement)
if err != nil {
return err
}
*b = ExpireDeleteMarker(deleteMarker)
return nil
}
// MarshalXML encodes delete marker boolean into an XML form.
func (b *ExpireDeleteMarker) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error {
if !*b {
func (b ExpireDeleteMarker) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error {
if !b {
return nil
}
return e.EncodeElement(*b, startElement)
type expireDeleteMarkerWrapper ExpireDeleteMarker
return e.EncodeElement(expireDeleteMarkerWrapper(b), startElement)
}
// Validate - validates the "Expiration" element

View File

@@ -204,9 +204,7 @@ func (lc Lifecycle) ComputeAction(obj ObjectOpts) Action {
if time.Now().After(expectedExpiryTime(obj.ModTime, rule.NoncurrentVersionExpiration.NoncurrentDays)) {
return DeleteVersionAction
}
return NoneAction
}
return NoneAction
}
// All other expiration only applies to latest versions

View File

@@ -36,12 +36,13 @@ var (
errNoncurrentVersionTransitionUnsupported = Errorf("Specifying <NoncurrentVersionTransition></NoncurrentVersionTransition> is not supported")
)
// MarshalXML if non-current days not set returns empty tags
func (n *NoncurrentVersionExpiration) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if n.NoncurrentDays == ExpirationDays(0) {
// MarshalXML if non-current days not set to non zero value
func (n NoncurrentVersionExpiration) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if n.IsDaysNull() {
return nil
}
return e.EncodeElement(&n, start)
type noncurrentVersionExpirationWrapper NoncurrentVersionExpiration
return e.EncodeElement(noncurrentVersionExpirationWrapper(n), start)
}
// IsDaysNull returns true if days field is null