From 18a3566fe7f01992ec298c5b83403fb71922198a Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 29 Jul 2019 05:11:36 +0100 Subject: [PATCH] Fix some filename edge cases in ISO9660. --- DiscImageChef.Filesystems/ISO9660/Dir.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DiscImageChef.Filesystems/ISO9660/Dir.cs b/DiscImageChef.Filesystems/ISO9660/Dir.cs index 9dc0dac61..33f39dfdc 100644 --- a/DiscImageChef.Filesystems/ISO9660/Dir.cs +++ b/DiscImageChef.Filesystems/ISO9660/Dir.cs @@ -207,6 +207,20 @@ namespace DiscImageChef.Filesystems.ISO9660 continue; } + // Mac OS can use slashes, we cannot + entry.Filename = entry.Filename.Replace('/', '\u2215'); + + // Tailing '.' is only allowed on RRIP. If present it will be recreated below with the alternate name + if(entry.Filename.EndsWith(".", StringComparison.Ordinal)) + entry.Filename = entry.Filename.Substring(0, entry.Filename.Length - 1); + + if(entry.Filename.EndsWith(".;1", StringComparison.Ordinal)) + entry.Filename = entry.Filename.Substring(0, entry.Filename.Length - 3) + ";1"; + + // This is a legal Joliet name, different from VMS version fields, but Nero MAX incorrectly creates these filenames + if(joliet && entry.Filename.EndsWith(";1", StringComparison.Ordinal)) + entry.Filename = entry.Filename.Substring(0, entry.Filename.Length - 2); + // TODO: XA int systemAreaStart = entryOff + record.name_len + Marshal.SizeOf(); int systemAreaLength = record.length - record.name_len - Marshal.SizeOf();