@joebigelow / wix / commits / 07bee0d0

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 }