diff --git a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs index 3bd66ff..54276fc 100644 --- a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs +++ b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs @@ -3601,6 +3601,7 @@ private void ReadEntries() StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen); string name = ZipStrings.ConvertToStringExt(bitFlags, buffer, nameLen); + name = ZipStrings.ReplaceBackslashes(name); var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method) { diff --git a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs index cccac66..6ca6579 100644 --- a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs +++ b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs @@ -222,6 +222,7 @@ public ZipEntry GetNextEntry() inputBuffer.ReadRawBuffer(buffer); string name = ZipStrings.ConvertToStringExt(flags, buffer); + name = ZipStrings.ReplaceBackslashes(name); entry = new ZipEntry(name, versionRequiredToExtract, ZipConstants.VersionMadeBy, method) { diff --git a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipStrings.cs b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipStrings.cs index 2d0c4cf..820faee 100644 --- a/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipStrings.cs +++ b/ThirdParty/SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipStrings.cs @@ -190,5 +190,13 @@ public static byte[] ConvertToArray(int flags, string str) => (string.IsNullOrEmpty(str)) ? Empty.Array() : EncodingFromFlag(flags).GetBytes(str); + + public static string ReplaceBackslashes(string input) + { + const char BACKSLASH = '\\'; + if (input.Contains(BACKSLASH)) + return input.Replace(BACKSLASH, '/'); + return input; + } } }