From 9bd501d8289174e4c084284abbb8e467b8b00cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bia=C5=82as?= Date: Fri, 22 Mar 2024 17:51:44 +0100 Subject: [PATCH] Non-windows platforms unzipping Zip archives created under Windows may use backslash as internal path separator. This patch works this around by replacing any backslash with regular slash. Concerns: https://github.com/icsharpcode/SharpZipLib/issues/617 --- .../SharpZip/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs | 1 + .../src/ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs | 1 + .../src/ICSharpCode.SharpZipLib/Zip/ZipStrings.cs | 8 ++++++++ 3 files changed, 10 insertions(+) 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; + } } }