aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2023-03-22 22:41:21 -0700
committerRob Mensching <rob@firegiant.com>2023-03-23 21:48:29 -0700
commit2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33 (patch)
treea8c924d38733c730b34a74ec4335dcea31d9547e /src
parent0be5784115d2c8ea87c67bb4acedf8d545cf5615 (diff)
downloadwix-2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33.tar.gz
wix-2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33.tar.bz2
wix-2426cee1fc8c6e809c5a37abdf9d722a6e8e3a33.zip
Escape a trailing backslash in args to wixnative.exe
Fixes 7294
Diffstat (limited to 'src')
-rw-r--r--src/wix/WixToolset.Core.Native/WixNativeExe.cs6
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs14
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
113 } 113 }
114 else if (str.Contains(" ") && !str.StartsWith("\"")) 114 else if (str.Contains(" ") && !str.StartsWith("\""))
115 { 115 {
116 // Escape a trailing backslash with another backslash if quoting the path.
117 if (str.EndsWith("\\", StringComparison.Ordinal))
118 {
119 str += "\\";
120 }
121
116 yield return $"\"{str}\""; 122 yield return $"\"{str}\"";
117 } 123 }
118 else 124 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
50 [Fact] 50 [Fact]
51 public void CanMergeModuleAndValidate() 51 public void CanMergeModuleAndValidate()
52 { 52 {
53 var msmFolder = TestData.Get(@"TestData\SimpleModule"); 53 var msmFolder = TestData.Get("TestData", "SimpleModule");
54 var folder = TestData.Get(@"TestData\SimpleMerge"); 54 var folder = TestData.Get("TestData", "SimpleMerge");
55 55
56 using (var fs = new DisposableFileSystem()) 56 using (var fs = new DisposableFileSystem())
57 { 57 {
58 var intermediateFolder = fs.GetFolder(); 58 var intermediateFolder = Path.Combine(fs.GetFolder(), "path with spaces");
59 var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); 59 var msiPath = Path.Combine(intermediateFolder, "bin", "test.msi");
60 var cabPath = Path.Combine(intermediateFolder, @"bin\cab1.cab"); 60 var cabPath = Path.Combine(intermediateFolder, "bin", "cab1.cab");
61 61
62 var msmResult = WixRunner.Execute(new[] 62 var msmResult = WixRunner.Execute(new[]
63 { 63 {
@@ -83,11 +83,11 @@ namespace WixToolsetTest.CoreIntegration
83 83
84 result.AssertSuccess(); 84 result.AssertSuccess();
85 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(); 87 var section = intermediate.Sections.Single();
88 Assert.Empty(section.Symbols.OfType<FileSymbol>()); 88 Assert.Empty(section.Symbols.OfType<FileSymbol>());
89 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); 91 Assert.Empty(data.Tables["File"].Rows);
92 92
93 var results = Query.QueryDatabase(msiPath, new[] { "File" }); 93 var results = Query.QueryDatabase(msiPath, new[] { "File" });