From 2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 22 Mar 2023 22:41:21 -0700 Subject: Escape a trailing backslash in args to wixnative.exe Fixes 7294 --- src/wix/WixToolset.Core.Native/WixNativeExe.cs | 6 ++++++ .../test/WixToolsetTest.CoreIntegration/ModuleFixture.cs | 14 +++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/wix/WixToolset.Core.Native/WixNativeExe.cs b/src/wix/WixToolset.Core.Native/WixNativeExe.cs index 8b75f508..706986b6 100644 --- a/src/wix/WixToolset.Core.Native/WixNativeExe.cs +++ b/src/wix/WixToolset.Core.Native/WixNativeExe.cs @@ -113,6 +113,12 @@ namespace WixToolset.Core.Native } else if (str.Contains(" ") && !str.StartsWith("\"")) { + // Escape a trailing backslash with another backslash if quoting the path. + if (str.EndsWith("\\", StringComparison.Ordinal)) + { + str += "\\"; + } + yield return $"\"{str}\""; } else diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs index 4a3749fd..eadc70aa 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs @@ -50,14 +50,14 @@ namespace WixToolsetTest.CoreIntegration [Fact] public void CanMergeModuleAndValidate() { - var msmFolder = TestData.Get(@"TestData\SimpleModule"); - var folder = TestData.Get(@"TestData\SimpleMerge"); + var msmFolder = TestData.Get("TestData", "SimpleModule"); + var folder = TestData.Get("TestData", "SimpleMerge"); using (var fs = new DisposableFileSystem()) { - var intermediateFolder = fs.GetFolder(); - var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); - var cabPath = Path.Combine(intermediateFolder, @"bin\cab1.cab"); + var intermediateFolder = Path.Combine(fs.GetFolder(), "path with spaces"); + var msiPath = Path.Combine(intermediateFolder, "bin", "test.msi"); + var cabPath = Path.Combine(intermediateFolder, "bin", "cab1.cab"); var msmResult = WixRunner.Execute(new[] { @@ -83,11 +83,11 @@ namespace WixToolsetTest.CoreIntegration result.AssertSuccess(); - var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); + var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, "bin", "test.wixpdb")); var section = intermediate.Sections.Single(); Assert.Empty(section.Symbols.OfType()); - var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); + var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, "bin", "test.wixpdb")); Assert.Empty(data.Tables["File"].Rows); var results = Query.QueryDatabase(msiPath, new[] { "File" }); -- cgit v1.2.3-55-g6feb