@joebigelow / wix / commits / 2426cee1

Escape a trailing backslash in args to wixnative.exe

Fixes 7294

Rob Mensching committed Mar 22, 2023 at 22:41 UTC 2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33
2 files changed +13 -7
src/wix/WixToolset.Core.Native/WixNativeExe.cs
+6
@@ -113,6 +113,12 @@ namespace WixToolset.Core.Native
113 }
114 else if (str.Contains(" ") && !str.StartsWith("\""))
115 {
116 + // Escape a trailing backslash with another backslash if quoting the path.
117 + if (str.EndsWith("\\", StringComparison.Ordinal))
118 + {
119 + str += "\\";
120 + }
121 +
122 yield return $"\"{str}\"";
123 }
124 else
src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs
+7 -7
@@ -50,14 +50,14 @@ namespace WixToolsetTest.CoreIntegration
50 [Fact]
51 public void CanMergeModuleAndValidate()
52 {
53 - var msmFolder = TestData.Get(@"TestData\SimpleModule");
54 - var folder = TestData.Get(@"TestData\SimpleMerge");
53 + var msmFolder = TestData.Get("TestData", "SimpleModule");
54 + var folder = TestData.Get("TestData", "SimpleMerge");
55
56 using (var fs = new DisposableFileSystem())
57 {
58 - var intermediateFolder = fs.GetFolder();
59 - var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi");
60 - var cabPath = Path.Combine(intermediateFolder, @"bin\cab1.cab");
58 + var intermediateFolder = Path.Combine(fs.GetFolder(), "path with spaces");
59 + var msiPath = Path.Combine(intermediateFolder, "bin", "test.msi");
60 + var cabPath = Path.Combine(intermediateFolder, "bin", "cab1.cab");
61
62 var msmResult = WixRunner.Execute(new[]
63 {
@@ -83,11 +83,11 @@ namespace WixToolsetTest.CoreIntegration
83
84 result.AssertSuccess();
85
86 - var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
86 + var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, "bin", "test.wixpdb"));
87 var section = intermediate.Sections.Single();
88 Assert.Empty(section.Symbols.OfType<FileSymbol>());
89
90 - var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
90 + var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, "bin", "test.wixpdb"));
91 Assert.Empty(data.Tables["File"].Rows);
92
93 var results = Query.QueryDatabase(msiPath, new[] { "File" });