WIXBUG:6299 - Fix OverflowException in ReadUInt32.
Sean Hall committed
Dec 14, 2020 at 14:30 UTC
155a2a61ee57eee7735d031c489c90255b39797b
6 files changed
+96
-5
WixToolset.Core.sln
+15
@@ -14,6 +14,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.Extension", "src\te
14
EndProject
15
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.CoreIntegration", "src\test\WixToolsetTest.CoreIntegration\WixToolsetTest.CoreIntegration.csproj", "{E8A08E86-1780-4ED4-8F63-AB2B52C1C16B}"
16
EndProject
17
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Core.Burn", "src\test\WixToolsetTest.Core.Burn\WixToolsetTest.Core.Burn.csproj", "{DF63F589-028E-45A1-A212-948FACF1FDCD}"
18
+EndProject
19
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Core.TestPackage", "src\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj", "{853716DB-C02C-41BD-91BC-79CDC0C17D10}"
20
EndProject
21
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompileCoreTestExtensionWixlib", "src\test\CompileCoreTestExtensionWixlib\CompileCoreTestExtensionWixlib.csproj", "{23FC60D7-B101-42F8-9786-DB7A9CD964A2}"
@@ -88,6 +90,18 @@ Global
90
{E8A08E86-1780-4ED4-8F63-AB2B52C1C16B}.Release|x64.Build.0 = Release|Any CPU
91
{E8A08E86-1780-4ED4-8F63-AB2B52C1C16B}.Release|x86.ActiveCfg = Release|Any CPU
92
{E8A08E86-1780-4ED4-8F63-AB2B52C1C16B}.Release|x86.Build.0 = Release|Any CPU
93
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
94
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
95
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|x64.ActiveCfg = Debug|Any CPU
96
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|x64.Build.0 = Debug|Any CPU
97
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|x86.ActiveCfg = Debug|Any CPU
98
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Debug|x86.Build.0 = Debug|Any CPU
99
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
100
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|Any CPU.Build.0 = Release|Any CPU
101
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|x64.ActiveCfg = Release|Any CPU
102
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|x64.Build.0 = Release|Any CPU
103
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|x86.ActiveCfg = Release|Any CPU
104
+ {DF63F589-028E-45A1-A212-948FACF1FDCD}.Release|x86.Build.0 = Release|Any CPU
105
{853716DB-C02C-41BD-91BC-79CDC0C17D10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
106
{853716DB-C02C-41BD-91BC-79CDC0C17D10}.Debug|Any CPU.Build.0 = Debug|Any CPU
107
{853716DB-C02C-41BD-91BC-79CDC0C17D10}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -119,6 +133,7 @@ Global
133
GlobalSection(NestedProjects) = preSolution
134
{C66C2503-C671-4230-8B48-1D93A8532A28} = {1284331E-BC6C-426D-AAAF-140C0174F875}
135
{E8A08E86-1780-4ED4-8F63-AB2B52C1C16B} = {1284331E-BC6C-426D-AAAF-140C0174F875}
136
+ {DF63F589-028E-45A1-A212-948FACF1FDCD} = {1284331E-BC6C-426D-AAAF-140C0174F875}
137
{23FC60D7-B101-42F8-9786-DB7A9CD964A2} = {1284331E-BC6C-426D-AAAF-140C0174F875}
138
EndGlobalSection
139
GlobalSection(ExtensibilityGlobals) = postSolution
appveyor.cmd
+1
@@ -3,6 +3,7 @@
3
@set _P=%~dp0build\Release\publish
4
5
dotnet test -c Release src\test\WixToolsetTest.CoreIntegration || exit /b
6
+dotnet test -c Release src\test\WixToolsetTest.Core.Burn || exit /b
7
8
dotnet pack -c Release src\WixToolset.Core || exit /b
9
dotnet pack -c Release src\WixToolset.Core.Burn || exit /b
src/WixToolset.Core.Burn/Bundles/BurnCommon.cs
+5
-5
@@ -354,7 +354,7 @@ namespace WixToolset.Core.Burn.Bundles
354
/// <param name="bytes">Array from which to read.</param>
355
/// <param name="offset">Beginning offset from which to read.</param>
356
/// <returns>value at offset</returns>
357
- private static UInt16 ReadUInt16(byte[] bytes, UInt32 offset)
357
+ internal static UInt16 ReadUInt16(byte[] bytes, UInt32 offset)
358
{
359
Debug.Assert(offset + 2 <= bytes.Length);
360
return (UInt16)(bytes[offset] + (bytes[offset + 1] << 8));
@@ -366,10 +366,10 @@ namespace WixToolset.Core.Burn.Bundles
366
/// <param name="bytes">Array from which to read.</param>
367
/// <param name="offset">Beginning offset from which to read.</param>
368
/// <returns>value at offset</returns>
369
- private static UInt32 ReadUInt32(byte[] bytes, UInt32 offset)
369
+ internal static UInt32 ReadUInt32(byte[] bytes, UInt32 offset)
370
{
371
Debug.Assert(offset + 4 <= bytes.Length);
372
- return (UInt32)(bytes[offset] + (bytes[offset + 1] << 8) + (bytes[offset + 2] << 16) + (bytes[offset + 3] << 24));
372
+ return BurnCommon.ReadUInt16(bytes, offset) + ((UInt32)BurnCommon.ReadUInt16(bytes, offset + 2) << 16);
373
}
374
375
/// <summary>
@@ -378,10 +378,10 @@ namespace WixToolset.Core.Burn.Bundles
378
/// <param name="bytes">Array from which to read.</param>
379
/// <param name="offset">Beginning offset from which to read.</param>
380
/// <returns>value at offset</returns>
381
- private static UInt64 ReadUInt64(byte[] bytes, UInt32 offset)
381
+ internal static UInt64 ReadUInt64(byte[] bytes, UInt32 offset)
382
{
383
Debug.Assert(offset + 8 <= bytes.Length);
384
- return BurnCommon.ReadUInt32(bytes, offset) + ((UInt64)(BurnCommon.ReadUInt32(bytes, offset + 4)) << 32);
384
+ return BurnCommon.ReadUInt32(bytes, offset) + ((UInt64)BurnCommon.ReadUInt32(bytes, offset + 4) << 32);
385
}
386
}
387
}
src/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj
+3
@@ -15,6 +15,9 @@
15
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
16
<_Parameter1>WixToolset.Core.TestPackage, PublicKey=0024000004800000940000000602000000240000525341310004000001000100a9967ec28982f42ee51a47dd5204315975a6ed69294b982146a99a70130a2fa13e226aaddde14c17d1bf3af69e8956d69a86585e74d208efcc5ac98a0686055327b2e87960d3c39bf3a6bc1e572863327d19dbf4fd2616dda124dbea260755a2d1d39d3cf1049ea526493eb2bf996b8ad985e3012308529e5b9b0f5cd5fa04bd</_Parameter1>
17
</AssemblyAttribute>
18
+ <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
19
+ <_Parameter1>WixToolsetTest.Core.Burn, PublicKey=0024000004800000940000000602000000240000525341310004000001000100a9967ec28982f42ee51a47dd5204315975a6ed69294b982146a99a70130a2fa13e226aaddde14c17d1bf3af69e8956d69a86585e74d208efcc5ac98a0686055327b2e87960d3c39bf3a6bc1e572863327d19dbf4fd2616dda124dbea260755a2d1d39d3cf1049ea526493eb2bf996b8ad985e3012308529e5b9b0f5cd5fa04bd</_Parameter1>
20
+ </AssemblyAttribute>
21
</ItemGroup>
22
23
<ItemGroup>
src/test/WixToolsetTest.Core.Burn/BurnReaderFixture.cs
new
+44
@@ -0,0 +1,44 @@
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.Core.Burn
4
+{
5
+ using System;
6
+ using WixToolset.Core.Burn.Bundles;
7
+ using Xunit;
8
+
9
+ public class BurnReaderFixture
10
+ {
11
+ [Fact]
12
+ public void CanReadUInt16Max()
13
+ {
14
+ var bytes = new byte[] { 0xFF, 0xFF };
15
+ var offset = 0u;
16
+
17
+ var result = BurnCommon.ReadUInt16(bytes, offset);
18
+
19
+ Assert.Equal(UInt16.MaxValue, result);
20
+ }
21
+
22
+ [Fact]
23
+ public void CanReadUInt32Max()
24
+ {
25
+ var bytes = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF };
26
+ var offset = 0u;
27
+
28
+ var result = BurnCommon.ReadUInt32(bytes, offset);
29
+
30
+ Assert.Equal(UInt32.MaxValue, result);
31
+ }
32
+
33
+ [Fact]
34
+ public void CanReadUInt64Max()
35
+ {
36
+ var bytes = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
37
+ var offset = 0u;
38
+
39
+ var result = BurnCommon.ReadUInt64(bytes, offset);
40
+
41
+ Assert.Equal(UInt64.MaxValue, result);
42
+ }
43
+ }
44
+}
src/test/WixToolsetTest.Core.Burn/WixToolsetTest.Core.Burn.csproj
new
+28
@@ -0,0 +1,28 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- 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. -->
3
+
4
+<Project Sdk="Microsoft.NET.Sdk">
5
+ <PropertyGroup>
6
+ <TargetFramework>netcoreapp2.1</TargetFramework>
7
+ <IsPackable>false</IsPackable>
8
+ <DebugType>embedded</DebugType>
9
+ </PropertyGroup>
10
+
11
+ <PropertyGroup>
12
+ <NoWarn>NU1701</NoWarn>
13
+ </PropertyGroup>
14
+
15
+ <ItemGroup>
16
+ <ProjectReference Include="..\..\WixToolset.Core.Burn\WixToolset.Core.Burn.csproj" />
17
+ </ItemGroup>
18
+
19
+ <ItemGroup>
20
+ <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
21
+ </ItemGroup>
22
+
23
+ <ItemGroup>
24
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
25
+ <PackageReference Include="xunit" Version="2.4.1" />
26
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
27
+ </ItemGroup>
28
+</Project>