From 3efe3f3a8682f333741b3c52e10eea2297f43dc9 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Thu, 9 Mar 2023 03:43:57 -0800 Subject: Prevent direct references to platform neutral WixUI Fixes 7265 --- .../TestData/InvalidUIRef/Package.wxs | 23 ++++++++ .../test/WixToolsetTest.UI/UIExtensionFixture.cs | 68 +++++++++++++++------- src/ext/UI/wixext/UICompiler.cs | 1 - src/ext/UI/wixlib/WixUI_Advanced.wxs | 26 ++++----- src/ext/UI/wixlib/WixUI_FeatureTree.wxs | 22 +++---- src/ext/UI/wixlib/WixUI_InstallDir.wxs | 26 ++++----- src/ext/UI/wixlib/WixUI_Minimal.wxs | 22 +++---- src/ext/UI/wixlib/WixUI_Mondo.wxs | 26 ++++----- src/ext/UI/wixlib/ui.v3.ncrunchproject | 5 ++ 9 files changed, 135 insertions(+), 84 deletions(-) create mode 100644 src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs create mode 100644 src/ext/UI/wixlib/ui.v3.ncrunchproject (limited to 'src/ext') diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs new file mode 100644 index 00000000..3cf78b3a --- /dev/null +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs index e1f18be5..7f9b7313 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs +++ b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs @@ -2,11 +2,10 @@ namespace WixToolsetTest.UI { - using System; using System.IO; using System.Linq; - using WixInternal.TestSupport; using WixInternal.Core.TestPackage; + using WixInternal.TestSupport; using WixToolset.Data.WindowsInstaller; using WixToolset.UI; using Xunit; @@ -16,8 +15,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIAdvanced() { - var folder = TestData.Get(@"TestData\WixUI_Advanced"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Advanced"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -52,8 +51,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIAdvancedX64() { - var folder = TestData.Get(@"TestData\WixUI_Advanced"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Advanced"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -88,8 +87,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIAdvancedARM64() { - var folder = TestData.Get(@"TestData\WixUI_Advanced"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Advanced"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(BuildARM64, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -124,8 +123,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIFeatureTree() { - var folder = TestData.Get(@"TestData\WixUI_FeatureTree"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_FeatureTree"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -155,8 +154,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIInstallDir() { - var folder = TestData.Get(@"TestData\WixUI_InstallDir"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_InstallDir"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "Property", "ControlEvent"); @@ -191,8 +190,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIMinimal() { - var folder = TestData.Get(@"TestData\WixUI_Minimal"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Minimal"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -220,8 +219,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIMinimalInKazakh() { - var folder = TestData.Get(@"TestData\WixUI_Minimal"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Minimal"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(BuildInKazakh, "Dialog"); @@ -232,8 +231,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIMinimalAndReadPdb() { - var folder = TestData.Get(@"TestData\WixUI_Minimal"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Minimal"); + var bindFolder = TestData.Get(@"TestData", "data"); using (var fs = new DisposableFileSystem()) { @@ -258,8 +257,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIMondo() { - var folder = TestData.Get(@"TestData\WixUI_Mondo"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Mondo"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); @@ -292,8 +291,8 @@ namespace WixToolsetTest.UI [Fact] public void CanBuildUsingWixUIMondoLocalized() { - var folder = TestData.Get(@"TestData\WixUI_Mondo"); - var bindFolder = TestData.Get(@"TestData\data"); + var folder = TestData.Get(@"TestData", "WixUI_Mondo"); + var bindFolder = TestData.Get(@"TestData", "data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); var results = build.BuildAndQuery(BuildInGerman, "Control"); @@ -303,6 +302,31 @@ namespace WixToolsetTest.UI }, results.Where(s => s.StartsWith("Control:ErrorDlg\tY")).Select(s => s.Split('\t')[9]).ToArray()); } + [Fact] + public void CannotBuildWithV3LikeUIRef() + { + var folder = TestData.Get(@"TestData", "InvalidUIRef"); + + using (var fs = new DisposableFileSystem()) + { + var intermediateFolder = fs.GetFolder(); + var outputPath = Path.Combine(intermediateFolder, "bin", "test.msi"); + + var args = new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + "-ext", typeof(UIExtensionFactory).Assembly.Location, + "-intermediateFolder", intermediateFolder, + "-o", outputPath, + }; + + var results = WixRunner.Execute(args); + var message = results.Messages.Single(); + Assert.Equal("The identifier 'WixUI:WixUI_Mondo' is inaccessible due to its protection level.", message.ToString()); + } + } + private static void Build(string[] args) { var result = WixRunner.Execute(args) diff --git a/src/ext/UI/wixext/UICompiler.cs b/src/ext/UI/wixext/UICompiler.cs index 8b527454..5f2751c9 100644 --- a/src/ext/UI/wixext/UICompiler.cs +++ b/src/ext/UI/wixext/UICompiler.cs @@ -87,7 +87,6 @@ namespace WixToolset.UI else { var platform = this.Context.Platform == Platform.ARM64 ? "A64" : this.Context.Platform.ToString(); - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixUI, id); this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixUI, $"{id}_{platform}"); if (installDirectory != null) diff --git a/src/ext/UI/wixlib/WixUI_Advanced.wxs b/src/ext/UI/wixlib/WixUI_Advanced.wxs index 1aabbf96..bab05ec9 100644 --- a/src/ext/UI/wixlib/WixUI_Advanced.wxs +++ b/src/ext/UI/wixlib/WixUI_Advanced.wxs @@ -1,7 +1,5 @@ - - + + + + + + + + + + + + @@ -46,7 +56,7 @@ Todo: - + @@ -115,14 +125,4 @@ Todo: - - - - - - - - - - diff --git a/src/ext/UI/wixlib/WixUI_FeatureTree.wxs b/src/ext/UI/wixlib/WixUI_FeatureTree.wxs index e50839d3..6b9b1cf3 100644 --- a/src/ext/UI/wixlib/WixUI_FeatureTree.wxs +++ b/src/ext/UI/wixlib/WixUI_FeatureTree.wxs @@ -1,7 +1,5 @@ - - + - + + + + + + + + + + @@ -65,12 +73,4 @@ Patch dialog sequence: - - - - - - - - diff --git a/src/ext/UI/wixlib/WixUI_InstallDir.wxs b/src/ext/UI/wixlib/WixUI_InstallDir.wxs index 10b32ce8..e3c171df 100644 --- a/src/ext/UI/wixlib/WixUI_InstallDir.wxs +++ b/src/ext/UI/wixlib/WixUI_InstallDir.wxs @@ -1,7 +1,5 @@ - - + - + + + + + + + + + + + + @@ -72,14 +82,4 @@ Patch dialog sequence: - - - - - - - - - - diff --git a/src/ext/UI/wixlib/WixUI_Minimal.wxs b/src/ext/UI/wixlib/WixUI_Minimal.wxs index 6d1709c5..0c69d8f8 100644 --- a/src/ext/UI/wixlib/WixUI_Minimal.wxs +++ b/src/ext/UI/wixlib/WixUI_Minimal.wxs @@ -1,7 +1,5 @@ - - + - + + + + + + + + + + @@ -59,12 +67,4 @@ Patch dialog sequence: - - - - - - - - diff --git a/src/ext/UI/wixlib/WixUI_Mondo.wxs b/src/ext/UI/wixlib/WixUI_Mondo.wxs index 92890572..2f883b8b 100644 --- a/src/ext/UI/wixlib/WixUI_Mondo.wxs +++ b/src/ext/UI/wixlib/WixUI_Mondo.wxs @@ -1,7 +1,5 @@ - - + - + + + + + + + + + + + + @@ -74,14 +84,4 @@ Patch dialog sequence: - - - - - - - - - - diff --git a/src/ext/UI/wixlib/ui.v3.ncrunchproject b/src/ext/UI/wixlib/ui.v3.ncrunchproject new file mode 100644 index 00000000..319cd523 --- /dev/null +++ b/src/ext/UI/wixlib/ui.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file -- cgit v1.2.3-55-g6feb