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.
Ron Martin committed
Jul 2, 2021 at 23:06 UTC
0c0bb770717785e0a144272cbd9fe6390452fb64
11 files changed
+338
-15
src/wix/WixToolset.Core/Compiler_Package.cs
+18
-15
@@ -4362,8 +4362,8 @@ namespace WixToolset.Core
4362
string helpDirectoryId = null;
4363
string helpSubdirectory = null;
4364
var language = CompilerConstants.IntegerNotSet;
4365
- var majorVersion = CompilerConstants.IntegerNotSet;
4366
- var minorVersion = CompilerConstants.IntegerNotSet;
4365
+ XAttribute majorVersionAttrib = null;
4366
+ XAttribute minorVersionAttrib = null;
4367
var resourceId = CompilerConstants.LongNotSet;
4368
4369
foreach (var attrib in node.Attributes())
@@ -4413,10 +4413,10 @@ namespace WixToolset.Core
4413
language = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue);
4414
break;
4415
case "MajorVersion":
4416
- majorVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, UInt16.MaxValue);
4416
+ majorVersionAttrib = attrib;
4417
break;
4418
case "MinorVersion":
4419
- minorVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Byte.MaxValue);
4419
+ minorVersionAttrib = attrib;
4420
break;
4421
case "ResourceId":
4422
resourceId = this.Core.GetAttributeLongValue(sourceLineNumbers, attrib, Int32.MinValue, Int32.MaxValue);
@@ -4451,11 +4451,20 @@ namespace WixToolset.Core
4451
4452
helpDirectoryId = this.HandleSubdirectory(sourceLineNumbers, node, helpDirectoryId, helpSubdirectory, "HelpDirectory", "HelpSubdirectory");
4453
4454
+ // if the advertise state has not been set, default to non-advertised
4455
+ if (YesNoType.NotSet == advertise)
4456
+ {
4457
+ advertise = YesNoType.No;
4458
+ }
4459
+
4460
+ var majorVersion = (null == majorVersionAttrib) ? CompilerConstants.IntegerNotSet : this.Core.GetAttributeIntegerValue(sourceLineNumbers, majorVersionAttrib, 0, UInt16.MaxValue);
4461
+ var minorVersion = (null == minorVersionAttrib) ? CompilerConstants.IntegerNotSet : this.Core.GetAttributeIntegerValue(sourceLineNumbers, minorVersionAttrib, 0, (YesNoType.Yes == advertise) ? Byte.MaxValue : UInt16.MaxValue);
4462
+
4463
// build up the typelib version string for the registry if the major or minor version was specified
4464
string registryVersion = null;
4456
- if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion)
4465
+ if (null != majorVersionAttrib || null != minorVersionAttrib)
4466
{
4458
- if (CompilerConstants.IntegerNotSet != majorVersion)
4467
+ if (null != majorVersionAttrib)
4468
{
4469
registryVersion = majorVersion.ToString("x", CultureInfo.InvariantCulture.NumberFormat);
4470
}
@@ -4464,7 +4473,7 @@ namespace WixToolset.Core
4473
registryVersion = "0";
4474
}
4475
4467
- if (CompilerConstants.IntegerNotSet != minorVersion)
4476
+ if (null != minorVersionAttrib)
4477
{
4478
registryVersion = String.Concat(registryVersion, ".", minorVersion.ToString("x", CultureInfo.InvariantCulture.NumberFormat));
4479
}
@@ -4474,12 +4483,6 @@ namespace WixToolset.Core
4483
}
4484
}
4485
4477
- // if the advertise state has not been set, default to non-advertised
4478
- if (YesNoType.NotSet == advertise)
4479
- {
4480
- advertise = YesNoType.No;
4481
- }
4482
-
4486
foreach (var child in node.Elements())
4487
{
4488
if (CompilerCore.WixNamespace == child.Name.Namespace)
@@ -4549,9 +4552,9 @@ namespace WixToolset.Core
4552
FeatureRef = Guid.Empty.ToString("B")
4553
});
4554
4552
- if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion)
4555
+ if (null != majorVersionAttrib || null != minorVersionAttrib)
4556
{
4554
- symbol.Version = (CompilerConstants.IntegerNotSet != majorVersion ? majorVersion * 256 : 0) + (CompilerConstants.IntegerNotSet != minorVersion ? minorVersion : 0);
4557
+ symbol.Version = (null != majorVersionAttrib ? majorVersion * 256 : 0) + (null != minorVersionAttrib ? minorVersion : 0);
4558
}
4559
4560
if (CompilerConstants.IntegerNotSet != cost)
src/wix/test/WixToolsetTest.CoreIntegration/AdvertisedTypeLibVersionFixture.cs
new
+111
@@ -0,0 +1,111 @@
1
+// 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.
2
+
3
+namespace WixToolsetTest.CoreIntegration
4
+{
5
+ using System.IO;
6
+ using WixBuildTools.TestSupport;
7
+ using WixToolset.Core.TestPackage;
8
+ using WixToolset.Data;
9
+ using Xunit;
10
+
11
+ public class AdvertisedTypeLibVersionFixture
12
+ {
13
+ [Fact]
14
+ public void Allows16BitTypeLibMajorVersion()
15
+ {
16
+ var folder = TestData.Get(@"TestData");
17
+
18
+ using (var fs = new DisposableFileSystem())
19
+ {
20
+ var baseFolder = fs.GetFolder();
21
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
22
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
23
+
24
+ var result = WixRunner.Execute(new[]
25
+ {
26
+ "build",
27
+ Path.Combine(folder, "AdvertisedTypeLib", "MajorVersion16Bit.wxs"),
28
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
29
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
30
+ "-intermediateFolder", intermediateFolder,
31
+ "-o", msiPath
32
+ });
33
+ }
34
+ }
35
+
36
+ [Fact]
37
+ public void DoesNotAllow17BitTypeLibMajorVersion()
38
+ {
39
+ var folder = TestData.Get(@"TestData");
40
+
41
+ using (var fs = new DisposableFileSystem())
42
+ {
43
+ var baseFolder = fs.GetFolder();
44
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
45
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
46
+
47
+ var result = WixRunner.Execute(new[]
48
+ {
49
+ "build",
50
+ Path.Combine(folder, "AdvertisedTypeLib", "MajorVersion17Bit.wxs"),
51
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
52
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
53
+ "-intermediateFolder", intermediateFolder,
54
+ "-o", msiPath
55
+ });
56
+
57
+ Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange);
58
+ }
59
+ }
60
+
61
+ [Fact]
62
+ public void Allows8BitTypeLibMinorVersion()
63
+ {
64
+ var folder = TestData.Get(@"TestData");
65
+
66
+ using (var fs = new DisposableFileSystem())
67
+ {
68
+ var baseFolder = fs.GetFolder();
69
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
70
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
71
+
72
+ var result = WixRunner.Execute(new[]
73
+ {
74
+ "build",
75
+ Path.Combine(folder, "AdvertisedTypeLib", "MinorVersion8Bit.wxs"),
76
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
77
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
78
+ "-intermediateFolder", intermediateFolder,
79
+ "-o", msiPath
80
+ });
81
+
82
+ result.AssertSuccess();
83
+ }
84
+ }
85
+
86
+ [Fact]
87
+ public void DoesNotAllow9BitTypeLibMinorVersion()
88
+ {
89
+ var folder = TestData.Get(@"TestData");
90
+
91
+ using (var fs = new DisposableFileSystem())
92
+ {
93
+ var baseFolder = fs.GetFolder();
94
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
95
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
96
+
97
+ var result = WixRunner.Execute(new[]
98
+ {
99
+ "build",
100
+ Path.Combine(folder, "AdvertisedTypeLib", "MinorVersion9Bit.wxs"),
101
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
102
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
103
+ "-intermediateFolder", intermediateFolder,
104
+ "-o", msiPath
105
+ });
106
+
107
+ Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange);
108
+ }
109
+ }
110
+ }
111
+}
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion16Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="yes" Language="1033" MajorVersion="65535" MinorVersion="0" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MajorVersion17Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="yes" Language="1033" MajorVersion="65536" MinorVersion="0" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion8Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="yes" Language="1033" MajorVersion="1" MinorVersion="255" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AdvertisedTypeLib/MinorVersion9Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="yes" Language="1033" MajorVersion="1" MinorVersion="256" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion16Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="no" Language="1033" MajorVersion="65535" MinorVersion="0" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MajorVersion17Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="no" Language="1033" MajorVersion="65536" MinorVersion="0" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion16Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="no" Language="1033" MajorVersion="1" MinorVersion="65535" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/UnadvertisedTypeLib/MinorVersion17Bit.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <ComponentGroup Id="ProductComponents">
5
+ <Component Id="TypeLibComp" Directory="INSTALLFOLDER" Guid="8E262DD2-04FE-4213-92D9-CFA0D392DC46">
6
+ <File Source="test.txt" Name="TypeLibComp.txt">
7
+ <TypeLib Id="FF19093C-EA7A-4C41-9C1B-D706ECD9009F" Advertise="no" Language="1033" MajorVersion="1" MinorVersion="65536" />
8
+ </File>
9
+ </Component>
10
+ </ComponentGroup>
11
+ </Fragment>
12
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/UnadvertisedTypeLibVersionFixture.cs
new
+113
@@ -0,0 +1,113 @@
1
+// 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.
2
+
3
+namespace WixToolsetTest.CoreIntegration
4
+{
5
+ using System.IO;
6
+ using WixBuildTools.TestSupport;
7
+ using WixToolset.Core.TestPackage;
8
+ using WixToolset.Data;
9
+ using Xunit;
10
+
11
+ public class UnadvertisedTypeLibVersionFixture
12
+ {
13
+ [Fact]
14
+ public void Allows16BitTypeLibMajorVersion()
15
+ {
16
+ var folder = TestData.Get(@"TestData");
17
+
18
+ using (var fs = new DisposableFileSystem())
19
+ {
20
+ var baseFolder = fs.GetFolder();
21
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
22
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
23
+
24
+ var result = WixRunner.Execute(new[]
25
+ {
26
+ "build",
27
+ Path.Combine(folder, "UnadvertisedTypeLib", "MajorVersion16Bit.wxs"),
28
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
29
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
30
+ "-intermediateFolder", intermediateFolder,
31
+ "-o", msiPath
32
+ });
33
+
34
+ result.AssertSuccess();
35
+ }
36
+ }
37
+
38
+ [Fact]
39
+ public void DoesNotAllow17BitTypeLibMajorVersion()
40
+ {
41
+ var folder = TestData.Get(@"TestData");
42
+
43
+ using (var fs = new DisposableFileSystem())
44
+ {
45
+ var baseFolder = fs.GetFolder();
46
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
47
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
48
+
49
+ var result = WixRunner.Execute(new[]
50
+ {
51
+ "build",
52
+ Path.Combine(folder, "UnadvertisedTypeLib", "MajorVersion17Bit.wxs"),
53
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
54
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
55
+ "-intermediateFolder", intermediateFolder,
56
+ "-o", msiPath
57
+ });
58
+
59
+ Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange);
60
+ }
61
+ }
62
+
63
+ [Fact]
64
+ public void Allows16BitTypeLibMinorVersion()
65
+ {
66
+ var folder = TestData.Get(@"TestData");
67
+
68
+ using (var fs = new DisposableFileSystem())
69
+ {
70
+ var baseFolder = fs.GetFolder();
71
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
72
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
73
+
74
+ var result = WixRunner.Execute(new[]
75
+ {
76
+ "build",
77
+ Path.Combine(folder, "UnadvertisedTypeLib", "MinorVersion16Bit.wxs"),
78
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
79
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
80
+ "-intermediateFolder", intermediateFolder,
81
+ "-o", msiPath
82
+ });
83
+
84
+ result.AssertSuccess();
85
+ }
86
+ }
87
+
88
+ [Fact]
89
+ public void DoesNotAllow17BitTypeLibMinorVersion()
90
+ {
91
+ var folder = TestData.Get(@"TestData");
92
+
93
+ using (var fs = new DisposableFileSystem())
94
+ {
95
+ var baseFolder = fs.GetFolder();
96
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
97
+ var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
98
+
99
+ var result = WixRunner.Execute(new[]
100
+ {
101
+ "build",
102
+ Path.Combine(folder, "UnadvertisedTypeLib", "MinorVersion17Bit.wxs"),
103
+ Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
104
+ "-bindpath", Path.Combine(folder, "SingleFile", "data"),
105
+ "-intermediateFolder", intermediateFolder,
106
+ "-o", msiPath
107
+ });
108
+
109
+ Assert.True(result.ExitCode == (int)ErrorMessages.Ids.IntegralValueOutOfRange);
110
+ }
111
+ }
112
+ }
113
+}