From 07bee0d033f1b4acb63e3da17764a3855503bce2 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 24 Apr 2021 16:29:26 -0500 Subject: Block well known bundle ids in the compiler. --- .../OrderPackagesAndRollbackBoundariesCommand.cs | 11 +++---- src/WixToolset.Core/Compiler_Bundle.cs | 38 ++++++++++++++++++---- .../Link/FlattenAndProcessBundleTablesCommand.cs | 4 +-- 3 files changed, 38 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs index 19fd7619..ccf6b1c2 100644 --- a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs @@ -6,13 +6,12 @@ namespace WixToolset.Core.Burn.Bundles using System.Collections.Generic; using System.Linq; using WixToolset.Data; + using WixToolset.Data.Burn; using WixToolset.Data.Symbols; using WixToolset.Extensibility.Services; internal class OrderPackagesAndRollbackBoundariesCommand { - private const string DefaultBoundaryId = "WixDefaultBoundary"; - public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary packageFacades) { this.Messaging = messaging; @@ -47,14 +46,14 @@ namespace WixToolset.Core.Burn.Bundles // We handle uninstall (aka: backwards) rollback boundaries after // we get these install/repair (aka: forward) rollback boundaries // defined. - var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, DefaultBoundaryId)) { Vital = true }; + var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, BurnConstants.BundleDefaultBoundaryId)) { Vital = true }; var lastRollbackBoundary = pendingRollbackBoundary; var boundaryHadX86Package = false; var warnedMsiTransaction = false; foreach (var groupSymbol in groupSymbols) { - if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && "WixChain" == groupSymbol.ParentId) + if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && BurnConstants.BundleChainPackageGroupId == groupSymbol.ParentId) { if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade)) { @@ -63,7 +62,7 @@ namespace WixToolset.Core.Burn.Bundles if (null != pendingRollbackBoundary) { // If we used the default boundary, ensure the symbol is added to the section. - if (pendingRollbackBoundary.Id.Id == DefaultBoundaryId) + if (pendingRollbackBoundary.Id.Id == BurnConstants.BundleDefaultBoundaryId) { this.Section.AddSymbol(pendingRollbackBoundary); } @@ -97,7 +96,7 @@ namespace WixToolset.Core.Burn.Bundles var nextRollbackBoundary = boundariesById[groupSymbol.ChildId]; if (null != pendingRollbackBoundary) { - if (pendingRollbackBoundary.Id.Id != DefaultBoundaryId) + if (pendingRollbackBoundary.Id.Id != BurnConstants.BundleDefaultBoundaryId) { this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id)); } diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs index e09246df..6d2e75f7 100644 --- a/src/WixToolset.Core/Compiler_Bundle.cs +++ b/src/WixToolset.Core/Compiler_Bundle.cs @@ -535,6 +535,10 @@ namespace WixToolset.Core { case "Id": id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); + if (id?.Id == BurnConstants.BurnUXContainerName || id?.Id == BurnConstants.BurnDefaultAttachedContainerName) + { + this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); + } break; case "DownloadUrl": downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); @@ -1736,27 +1740,27 @@ namespace WixToolset.Core switch (child.Name.LocalName) { case "MsiPackage": - previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.Package; break; case "MspPackage": - previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.Package; break; case "MsuPackage": - previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.Package; break; case "ExePackage": - previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.Package; break; case "RollbackBoundary": - previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.Package; break; case "PackageGroupRef": - previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); + previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); previousType = ComplexReferenceChildType.PackageGroup; break; default: @@ -1873,6 +1877,10 @@ namespace WixToolset.Core { case "Id": id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); + if (id?.Id == BurnConstants.BundleDefaultBoundaryId) + { + this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); + } break; case "Vital": vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); @@ -2151,6 +2159,11 @@ namespace WixToolset.Core compilerPayload.FinishCompilingPackage(); var id = compilerPayload.Id; + if (id.Id == BurnConstants.BundleDefaultBoundaryId) + { + this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); + } + if (null == logPathVariable) { logPathVariable = String.Concat("WixBundleLog_", id.Id); @@ -2588,6 +2601,10 @@ namespace WixToolset.Core { case "Id": id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); + if (id?.Id == BurnConstants.BundleChainPackageGroupId) + { + this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); + } break; default: this.Core.UnexpectedAttribute(node, attrib); @@ -2694,7 +2711,14 @@ namespace WixToolset.Core { case "Id": id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); - this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id); + if (id == BurnConstants.BundleChainPackageGroupId) + { + this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id)); + } + else + { + this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id); + } break; case "After": after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); diff --git a/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs b/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs index e8df25ed..52734141 100644 --- a/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs +++ b/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs @@ -54,7 +54,7 @@ namespace WixToolset.Core.Link // Create Chain packages... groups.UseTypes(new[] { ComplexReferenceParentType.PackageGroup }, new[] { ComplexReferenceChildType.Package, ComplexReferenceChildType.PackageGroup }); - groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, "WixChain", false); + groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, false); groups.RemoveUsedGroupRows(); } @@ -93,7 +93,7 @@ namespace WixToolset.Core.Link switch (groupSymbol.ParentType) { case ComplexReferenceParentType.PackageGroup: - if (groupSymbol.ParentId == "WixChain") + if (groupSymbol.ParentId == BurnConstants.BundleChainPackageGroupId) { referencedPackages.Add(groupSymbol.ChildId); } -- cgit v1.2.3-55-g6feb