From a583bbe147ade15418550c360f7d165bc80ededf Mon Sep 17 00:00:00 2001 From: t3ls Date: Thu, 4 Feb 2021 16:39:59 +0800 Subject: [PATCH 1/2] fix(filesystem/iso9660): fix bug when compare null bytes --- filesystem/iso9660/volume_descriptor.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/filesystem/iso9660/volume_descriptor.go b/filesystem/iso9660/volume_descriptor.go index 14a6cea2..139c140b 100644 --- a/filesystem/iso9660/volume_descriptor.go +++ b/filesystem/iso9660/volume_descriptor.go @@ -234,13 +234,13 @@ func parsePrimaryVolumeDescriptor(b []byte) (*primaryVolumeDescriptor, error) { var expiration, effective time.Time expirationBytes := b[847 : 847+17] effectiveBytes := b[864 : 864+17] - if bytes.Compare(expirationBytes, nullBytes) != 0 { + if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { expiration, err = decBytesToTime(expirationBytes) if err != nil { return nil, fmt.Errorf("Unable to convert expiration date/time from bytes: %v", err) } } - if bytes.Compare(effectiveBytes, nullBytes) != 0 { + if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { effective, err = decBytesToTime(effectiveBytes) if err != nil { return nil, fmt.Errorf("Unable to convert effective date/time from bytes: %v", err) @@ -335,13 +335,13 @@ func parseSupplementaryVolumeDescriptor(b []byte) (*supplementaryVolumeDescripto var expiration, effective time.Time expirationBytes := b[847 : 847+17] effectiveBytes := b[864 : 864+17] - if bytes.Compare(expirationBytes, nullBytes) != 0 { + if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { expiration, err = decBytesToTime(expirationBytes) if err != nil { return nil, fmt.Errorf("Unable to convert expiration date/time from bytes: %v", err) } } - if bytes.Compare(effectiveBytes, nullBytes) != 0 { + if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { effective, err = decBytesToTime(effectiveBytes) if err != nil { return nil, fmt.Errorf("Unable to convert effective date/time from bytes: %v", err) From 024e69f412251eef4d1975061382b30b4baba7c1 Mon Sep 17 00:00:00 2001 From: t3ls Date: Fri, 5 Feb 2021 11:00:02 +0800 Subject: [PATCH 2/2] chore(filesystem/iso9660): move nullBytesAlt to a new var --- filesystem/iso9660/volume_descriptor.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/filesystem/iso9660/volume_descriptor.go b/filesystem/iso9660/volume_descriptor.go index 139c140b..55b8bcf8 100644 --- a/filesystem/iso9660/volume_descriptor.go +++ b/filesystem/iso9660/volume_descriptor.go @@ -231,16 +231,17 @@ func parsePrimaryVolumeDescriptor(b []byte) (*primaryVolumeDescriptor, error) { } // expiration can be never nullBytes := []byte{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0} + nullBytesAlt := bytes.Repeat([]byte{0}, len(nullBytes)) var expiration, effective time.Time expirationBytes := b[847 : 847+17] effectiveBytes := b[864 : 864+17] - if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { + if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, nullBytesAlt) != 0 { expiration, err = decBytesToTime(expirationBytes) if err != nil { return nil, fmt.Errorf("Unable to convert expiration date/time from bytes: %v", err) } } - if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { + if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, nullBytesAlt) != 0 { effective, err = decBytesToTime(effectiveBytes) if err != nil { return nil, fmt.Errorf("Unable to convert effective date/time from bytes: %v", err) @@ -332,16 +333,17 @@ func parseSupplementaryVolumeDescriptor(b []byte) (*supplementaryVolumeDescripto } // expiration can be never nullBytes := []byte{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0} + nullBytesAlt := bytes.Repeat([]byte{0}, len(nullBytes)) var expiration, effective time.Time expirationBytes := b[847 : 847+17] effectiveBytes := b[864 : 864+17] - if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { + if bytes.Compare(expirationBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, nullBytesAlt) != 0 { expiration, err = decBytesToTime(expirationBytes) if err != nil { return nil, fmt.Errorf("Unable to convert expiration date/time from bytes: %v", err) } } - if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, bytes.Repeat([]byte{0}, len(nullBytes))) != 0 { + if bytes.Compare(effectiveBytes, nullBytes) != 0 && bytes.Compare(expirationBytes, nullBytesAlt) != 0 { effective, err = decBytesToTime(effectiveBytes) if err != nil { return nil, fmt.Errorf("Unable to convert effective date/time from bytes: %v", err)