From 0c0bb770717785e0a144272cbd9fe6390452fb64 Mon Sep 17 00:00:00 2001 From: Ron Martin Date: Fri, 2 Jul 2021 23:06:44 -0400 Subject: See wixtoolset/Issues/4726. Implements actually failing and potentially failing tests for the proper enforcement of proper field widths for major an minor version numbers for advertised and unadvertised type ibraries. Implements the enforcement of proper field widths for major an minor version numbers for advertised and unadvertised type libraries. See wixtoolset/Issues/4726. --- src/wix/WixToolset.Core/Compiler_Package.cs | 33 +++--- .../AdvertisedTypeLibVersionFixture.cs | 111 ++++++++++++++++++++ .../AdvertisedTypeLib/MajorVersion16Bit.wxs | 12 +++ .../AdvertisedTypeLib/MajorVersion17Bit.wxs | 12 +++ .../AdvertisedTypeLib/MinorVersion8Bit.wxs | 12 +++ .../AdvertisedTypeLib/MinorVersion9Bit.wxs | 12 +++ .../UnadvertisedTypeLib/MajorVersion16Bit.wxs | 12 +++ .../UnadvertisedTypeLib/MajorVersion17Bit.wxs | 12 +++ .../UnadvertisedTypeLib/MinorVersion16Bit.wxs | 12 +++ .../UnadvertisedTypeLib/MinorVersion17Bit.wxs | 12 +++ .../UnadvertisedTypeLibVersionFixture.cs | 113 +++++++++++++++++++++ 11 files changed, 338 insertions(+), 15 deletions(-) create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/AdvertisedTypeLibVersionFixture.cs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion16Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion17Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion8Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion9Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion16Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion17Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion16Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion17Bit.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/UnadvertisedTypeLibVersionFixture.cs (limited to 'src') diff --git a/src/wix/WixToolset.Core/Compiler_Package.cs b/src/wix/WixToolset.Core/Compiler_Package.cs index 87ccceb7..d3db2e80 100644 --- a/src/wix/WixToolset.Core/Compiler_Package.cs +++ b/src/wix/WixToolset.Core/Compiler_Package.cs @@ -4362,8 +4362,8 @@ namespace WixToolset.Core string helpDirectoryId = null; string helpSubdirectory = null; var language = CompilerConstants.IntegerNotSet; - var majorVersion = CompilerConstants.IntegerNotSet; - var minorVersion = CompilerConstants.IntegerNotSet; + XAttribute majorVersionAttrib = null; + XAttribute minorVersionAttrib = null; var resourceId = CompilerConstants.LongNotSet; foreach (var attrib in node.Attributes()) @@ -4413,10 +4413,10 @@ namespace WixToolset.Core language = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); break; case "MajorVersion": - majorVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, UInt16.MaxValue); + majorVersionAttrib = attrib; break; case "MinorVersion": - minorVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Byte.MaxValue); + minorVersionAttrib = attrib; break; case "ResourceId": resourceId = this.Core.GetAttributeLongValue(sourceLineNumbers, attrib, Int32.MinValue, Int32.MaxValue); @@ -4451,11 +4451,20 @@ namespace WixToolset.Core helpDirectoryId = this.HandleSubdirectory(sourceLineNumbers, node, helpDirectoryId, helpSubdirectory, "HelpDirectory", "HelpSubdirectory"); + // if the advertise state has not been set, default to non-advertised + if (YesNoType.NotSet == advertise) + { + advertise = YesNoType.No; + } + + var majorVersion = (null == majorVersionAttrib) ? CompilerConstants.IntegerNotSet : this.Core.GetAttributeIntegerValue(sourceLineNumbers, majorVersionAttrib, 0, UInt16.MaxValue); + var minorVersion = (null == minorVersionAttrib) ? CompilerConstants.IntegerNotSet : this.Core.GetAttributeIntegerValue(sourceLineNumbers, minorVersionAttrib, 0, (YesNoType.Yes == advertise) ? Byte.MaxValue : UInt16.MaxValue); + // build up the typelib version string for the registry if the major or minor version was specified string registryVersion = null; - if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion) + if (null != majorVersionAttrib || null != minorVersionAttrib) { - if (CompilerConstants.IntegerNotSet != majorVersion) + if (null != majorVersionAttrib) { registryVersion = majorVersion.ToString("x", CultureInfo.InvariantCulture.NumberFormat); } @@ -4464,7 +4473,7 @@ namespace WixToolset.Core registryVersion = "0"; } - if (CompilerConstants.IntegerNotSet != minorVersion) + if (null != minorVersionAttrib) { registryVersion = String.Concat(registryVersion, ".", minorVersion.ToString("x", CultureInfo.InvariantCulture.NumberFormat)); } @@ -4474,12 +4483,6 @@ namespace WixToolset.Core } } - // if the advertise state has not been set, default to non-advertised - if (YesNoType.NotSet == advertise) - { - advertise = YesNoType.No; - } - foreach (var child in node.Elements()) { if (CompilerCore.WixNamespace == child.Name.Namespace) @@ -4549,9 +4552,9 @@ namespace WixToolset.Core FeatureRef = Guid.Empty.ToString("B") }); - if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion) + if (null != majorVersionAttrib || null != minorVersionAttrib) { - symbol.Version = (CompilerConstants.IntegerNotSet != majorVersion ? majorVersion * 256 : 0) + (CompilerConstants.IntegerNotSet != minorVersion ? minorVersion : 0); + symbol.Version = (null != majorVersionAttrib ? majorVersion * 256 : 0) + (null != minorVersionAttrib ? minorVersion : 0); } if (CompilerConstants.IntegerNotSet != cost) diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/AdvertisedTypeLibVersionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/AdvertisedTypeLibVersionFixture.cs new file mode 100644 index 00000000..106e2483 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/AdvertisedTypeLibVersionFixture.cs @@ -0,0 +1,111 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.CoreIntegration +{ + using System.IO; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using WixToolset.Data; + using Xunit; + + public class AdvertisedTypeLibVersionFixture + { + [Fact] + public void Allows16BitTypeLibMajorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AdvertisedTypeLib", "MajorVersion16Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + } + } + + [Fact] + public void DoesNotAllow17BitTypeLibMajorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AdvertisedTypeLib", "MajorVersion17Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange); + } + } + + [Fact] + public void Allows8BitTypeLibMinorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AdvertisedTypeLib", "MinorVersion8Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + } + } + + [Fact] + public void DoesNotAllow9BitTypeLibMinorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AdvertisedTypeLib", "MinorVersion9Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange); + } + } + } +} diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion16Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion16Bit.wxs new file mode 100644 index 00000000..72ef1b79 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion16Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion17Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion17Bit.wxs new file mode 100644 index 00000000..f52de276 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion17Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion8Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion8Bit.wxs new file mode 100644 index 00000000..5e59c307 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion8Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion9Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion9Bit.wxs new file mode 100644 index 00000000..20185a42 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion9Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion16Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion16Bit.wxs new file mode 100644 index 00000000..e56356c0 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion16Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion17Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion17Bit.wxs new file mode 100644 index 00000000..4a92da46 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion17Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion16Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion16Bit.wxs new file mode 100644 index 00000000..cd7383cd --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion16Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion17Bit.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion17Bit.wxs new file mode 100644 index 00000000..801f0a2d --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion17Bit.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/UnadvertisedTypeLibVersionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/UnadvertisedTypeLibVersionFixture.cs new file mode 100644 index 00000000..247902c1 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/UnadvertisedTypeLibVersionFixture.cs @@ -0,0 +1,113 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.CoreIntegration +{ + using System.IO; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using WixToolset.Data; + using Xunit; + + public class UnadvertisedTypeLibVersionFixture + { + [Fact] + public void Allows16BitTypeLibMajorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "UnadvertisedTypeLib", "MajorVersion16Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + } + } + + [Fact] + public void DoesNotAllow17BitTypeLibMajorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "UnadvertisedTypeLib", "MajorVersion17Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange); + } + } + + [Fact] + public void Allows16BitTypeLibMinorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "UnadvertisedTypeLib", "MinorVersion16Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + } + } + + [Fact] + public void DoesNotAllow17BitTypeLibMinorVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "UnadvertisedTypeLib", "MinorVersion17Bit.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange); + } + } + } +} -- cgit v1.2.3-55-g6feb