Block well known bundle ids in the compiler.
Sean Hall committed
Apr 24, 2021 at 16:29 UTC
07bee0d033f1b4acb63e3da17764a3855503bce2
3 files changed
+38
-15
src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs
+5
-6
@@ -6,13 +6,12 @@ namespace WixToolset.Core.Burn.Bundles
6
using System.Collections.Generic;
7
using System.Linq;
8
using WixToolset.Data;
9
+ using WixToolset.Data.Burn;
10
using WixToolset.Data.Symbols;
11
using WixToolset.Extensibility.Services;
12
13
internal class OrderPackagesAndRollbackBoundariesCommand
14
{
14
- private const string DefaultBoundaryId = "WixDefaultBoundary";
15
-
15
public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary<string, PackageFacade> packageFacades)
16
{
17
this.Messaging = messaging;
@@ -47,14 +46,14 @@ namespace WixToolset.Core.Burn.Bundles
46
// We handle uninstall (aka: backwards) rollback boundaries after
47
// we get these install/repair (aka: forward) rollback boundaries
48
// defined.
50
- var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, DefaultBoundaryId)) { Vital = true };
49
+ var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, BurnConstants.BundleDefaultBoundaryId)) { Vital = true };
50
var lastRollbackBoundary = pendingRollbackBoundary;
51
var boundaryHadX86Package = false;
52
var warnedMsiTransaction = false;
53
54
foreach (var groupSymbol in groupSymbols)
55
{
57
- if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && "WixChain" == groupSymbol.ParentId)
56
+ if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && BurnConstants.BundleChainPackageGroupId == groupSymbol.ParentId)
57
{
58
if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade))
59
{
@@ -63,7 +62,7 @@ namespace WixToolset.Core.Burn.Bundles
62
if (null != pendingRollbackBoundary)
63
{
64
// If we used the default boundary, ensure the symbol is added to the section.
66
- if (pendingRollbackBoundary.Id.Id == DefaultBoundaryId)
65
+ if (pendingRollbackBoundary.Id.Id == BurnConstants.BundleDefaultBoundaryId)
66
{
67
this.Section.AddSymbol(pendingRollbackBoundary);
68
}
@@ -97,7 +96,7 @@ namespace WixToolset.Core.Burn.Bundles
96
var nextRollbackBoundary = boundariesById[groupSymbol.ChildId];
97
if (null != pendingRollbackBoundary)
98
{
100
- if (pendingRollbackBoundary.Id.Id != DefaultBoundaryId)
99
+ if (pendingRollbackBoundary.Id.Id != BurnConstants.BundleDefaultBoundaryId)
100
{
101
this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id));
102
}
src/WixToolset.Core/Compiler_Bundle.cs
+31
-7
@@ -535,6 +535,10 @@ namespace WixToolset.Core
535
{
536
case "Id":
537
id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
538
+ if (id?.Id == BurnConstants.BurnUXContainerName || id?.Id == BurnConstants.BurnDefaultAttachedContainerName)
539
+ {
540
+ this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
541
+ }
542
break;
543
case "DownloadUrl":
544
downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1736,27 +1740,27 @@ namespace WixToolset.Core
1740
switch (child.Name.LocalName)
1741
{
1742
case "MsiPackage":
1739
- previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1743
+ previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1744
previousType = ComplexReferenceChildType.Package;
1745
break;
1746
case "MspPackage":
1743
- previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1747
+ previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1748
previousType = ComplexReferenceChildType.Package;
1749
break;
1750
case "MsuPackage":
1747
- previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1751
+ previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1752
previousType = ComplexReferenceChildType.Package;
1753
break;
1754
case "ExePackage":
1751
- previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1755
+ previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1756
previousType = ComplexReferenceChildType.Package;
1757
break;
1758
case "RollbackBoundary":
1755
- previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1759
+ previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1760
previousType = ComplexReferenceChildType.Package;
1761
break;
1762
case "PackageGroupRef":
1759
- previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId);
1763
+ previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1764
previousType = ComplexReferenceChildType.PackageGroup;
1765
break;
1766
default:
@@ -1873,6 +1877,10 @@ namespace WixToolset.Core
1877
{
1878
case "Id":
1879
id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
1880
+ if (id?.Id == BurnConstants.BundleDefaultBoundaryId)
1881
+ {
1882
+ this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
1883
+ }
1884
break;
1885
case "Vital":
1886
vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -2151,6 +2159,11 @@ namespace WixToolset.Core
2159
compilerPayload.FinishCompilingPackage();
2160
var id = compilerPayload.Id;
2161
2162
+ if (id.Id == BurnConstants.BundleDefaultBoundaryId)
2163
+ {
2164
+ this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
2165
+ }
2166
+
2167
if (null == logPathVariable)
2168
{
2169
logPathVariable = String.Concat("WixBundleLog_", id.Id);
@@ -2588,6 +2601,10 @@ namespace WixToolset.Core
2601
{
2602
case "Id":
2603
id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
2604
+ if (id?.Id == BurnConstants.BundleChainPackageGroupId)
2605
+ {
2606
+ this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
2607
+ }
2608
break;
2609
default:
2610
this.Core.UnexpectedAttribute(node, attrib);
@@ -2694,7 +2711,14 @@ namespace WixToolset.Core
2711
{
2712
case "Id":
2713
id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2697
- this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id);
2714
+ if (id == BurnConstants.BundleChainPackageGroupId)
2715
+ {
2716
+ this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id));
2717
+ }
2718
+ else
2719
+ {
2720
+ this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id);
2721
+ }
2722
break;
2723
case "After":
2724
after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs
+2
-2
@@ -54,7 +54,7 @@ namespace WixToolset.Core.Link
54
55
// Create Chain packages...
56
groups.UseTypes(new[] { ComplexReferenceParentType.PackageGroup }, new[] { ComplexReferenceChildType.Package, ComplexReferenceChildType.PackageGroup });
57
- groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, "WixChain", false);
57
+ groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, false);
58
59
groups.RemoveUsedGroupRows();
60
}
@@ -93,7 +93,7 @@ namespace WixToolset.Core.Link
93
switch (groupSymbol.ParentType)
94
{
95
case ComplexReferenceParentType.PackageGroup:
96
- if (groupSymbol.ParentId == "WixChain")
96
+ if (groupSymbol.ParentId == BurnConstants.BundleChainPackageGroupId)
97
{
98
referencedPackages.Add(groupSymbol.ChildId);
99
}