aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-04-24 16:29:26 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-04-25 23:06:35 -0500
commit07bee0d033f1b4acb63e3da17764a3855503bce2 (patch)
treee16896f1e61f071b8c2637e0e3bb8c8976f8a2f4 /src
parentf4709371fa21ca1d0c06e04d1b53c0b10bfafeed (diff)
downloadwix-07bee0d033f1b4acb63e3da17764a3855503bce2.tar.gz
wix-07bee0d033f1b4acb63e3da17764a3855503bce2.tar.bz2
wix-07bee0d033f1b4acb63e3da17764a3855503bce2.zip
Block well known bundle ids in the compiler.
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs11
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs38
-rw-r--r--src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs4
3 files changed, 38 insertions, 15 deletions
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
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Burn;
9 using WixToolset.Data.Symbols; 10 using WixToolset.Data.Symbols;
10 using WixToolset.Extensibility.Services; 11 using WixToolset.Extensibility.Services;
11 12
12 internal class OrderPackagesAndRollbackBoundariesCommand 13 internal class OrderPackagesAndRollbackBoundariesCommand
13 { 14 {
14 private const string DefaultBoundaryId = "WixDefaultBoundary";
15
16 public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary<string, PackageFacade> packageFacades) 15 public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary<string, PackageFacade> packageFacades)
17 { 16 {
18 this.Messaging = messaging; 17 this.Messaging = messaging;
@@ -47,14 +46,14 @@ namespace WixToolset.Core.Burn.Bundles
47 // We handle uninstall (aka: backwards) rollback boundaries after 46 // We handle uninstall (aka: backwards) rollback boundaries after
48 // we get these install/repair (aka: forward) rollback boundaries 47 // we get these install/repair (aka: forward) rollback boundaries
49 // defined. 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 };
51 var lastRollbackBoundary = pendingRollbackBoundary; 50 var lastRollbackBoundary = pendingRollbackBoundary;
52 var boundaryHadX86Package = false; 51 var boundaryHadX86Package = false;
53 var warnedMsiTransaction = false; 52 var warnedMsiTransaction = false;
54 53
55 foreach (var groupSymbol in groupSymbols) 54 foreach (var groupSymbol in groupSymbols)
56 { 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)
58 { 57 {
59 if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade)) 58 if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade))
60 { 59 {
@@ -63,7 +62,7 @@ namespace WixToolset.Core.Burn.Bundles
63 if (null != pendingRollbackBoundary) 62 if (null != pendingRollbackBoundary)
64 { 63 {
65 // If we used the default boundary, ensure the symbol is added to the section. 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)
67 { 66 {
68 this.Section.AddSymbol(pendingRollbackBoundary); 67 this.Section.AddSymbol(pendingRollbackBoundary);
69 } 68 }
@@ -97,7 +96,7 @@ namespace WixToolset.Core.Burn.Bundles
97 var nextRollbackBoundary = boundariesById[groupSymbol.ChildId]; 96 var nextRollbackBoundary = boundariesById[groupSymbol.ChildId];
98 if (null != pendingRollbackBoundary) 97 if (null != pendingRollbackBoundary)
99 { 98 {
100 if (pendingRollbackBoundary.Id.Id != DefaultBoundaryId) 99 if (pendingRollbackBoundary.Id.Id != BurnConstants.BundleDefaultBoundaryId)
101 { 100 {
102 this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id)); 101 this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id));
103 } 102 }
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
535 { 535 {
536 case "Id": 536 case "Id":
537 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); 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 }
538 break; 542 break;
539 case "DownloadUrl": 543 case "DownloadUrl":
540 downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 544 downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1736,27 +1740,27 @@ namespace WixToolset.Core
1736 switch (child.Name.LocalName) 1740 switch (child.Name.LocalName)
1737 { 1741 {
1738 case "MsiPackage": 1742 case "MsiPackage":
1739 previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1743 previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1740 previousType = ComplexReferenceChildType.Package; 1744 previousType = ComplexReferenceChildType.Package;
1741 break; 1745 break;
1742 case "MspPackage": 1746 case "MspPackage":
1743 previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1747 previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1744 previousType = ComplexReferenceChildType.Package; 1748 previousType = ComplexReferenceChildType.Package;
1745 break; 1749 break;
1746 case "MsuPackage": 1750 case "MsuPackage":
1747 previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1751 previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1748 previousType = ComplexReferenceChildType.Package; 1752 previousType = ComplexReferenceChildType.Package;
1749 break; 1753 break;
1750 case "ExePackage": 1754 case "ExePackage":
1751 previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1755 previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1752 previousType = ComplexReferenceChildType.Package; 1756 previousType = ComplexReferenceChildType.Package;
1753 break; 1757 break;
1754 case "RollbackBoundary": 1758 case "RollbackBoundary":
1755 previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1759 previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1756 previousType = ComplexReferenceChildType.Package; 1760 previousType = ComplexReferenceChildType.Package;
1757 break; 1761 break;
1758 case "PackageGroupRef": 1762 case "PackageGroupRef":
1759 previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); 1763 previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId);
1760 previousType = ComplexReferenceChildType.PackageGroup; 1764 previousType = ComplexReferenceChildType.PackageGroup;
1761 break; 1765 break;
1762 default: 1766 default:
@@ -1873,6 +1877,10 @@ namespace WixToolset.Core
1873 { 1877 {
1874 case "Id": 1878 case "Id":
1875 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); 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 }
1876 break; 1884 break;
1877 case "Vital": 1885 case "Vital":
1878 vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 1886 vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -2151,6 +2159,11 @@ namespace WixToolset.Core
2151 compilerPayload.FinishCompilingPackage(); 2159 compilerPayload.FinishCompilingPackage();
2152 var id = compilerPayload.Id; 2160 var id = compilerPayload.Id;
2153 2161
2162 if (id.Id == BurnConstants.BundleDefaultBoundaryId)
2163 {
2164 this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
2165 }
2166
2154 if (null == logPathVariable) 2167 if (null == logPathVariable)
2155 { 2168 {
2156 logPathVariable = String.Concat("WixBundleLog_", id.Id); 2169 logPathVariable = String.Concat("WixBundleLog_", id.Id);
@@ -2588,6 +2601,10 @@ namespace WixToolset.Core
2588 { 2601 {
2589 case "Id": 2602 case "Id":
2590 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); 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 }
2591 break; 2608 break;
2592 default: 2609 default:
2593 this.Core.UnexpectedAttribute(node, attrib); 2610 this.Core.UnexpectedAttribute(node, attrib);
@@ -2694,7 +2711,14 @@ namespace WixToolset.Core
2694 { 2711 {
2695 case "Id": 2712 case "Id":
2696 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 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 }
2698 break; 2722 break;
2699 case "After": 2723 case "After":
2700 after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2724 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
54 54
55 // Create Chain packages... 55 // Create Chain packages...
56 groups.UseTypes(new[] { ComplexReferenceParentType.PackageGroup }, new[] { ComplexReferenceChildType.Package, ComplexReferenceChildType.PackageGroup }); 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 58
59 groups.RemoveUsedGroupRows(); 59 groups.RemoveUsedGroupRows();
60 } 60 }
@@ -93,7 +93,7 @@ namespace WixToolset.Core.Link
93 switch (groupSymbol.ParentType) 93 switch (groupSymbol.ParentType)
94 { 94 {
95 case ComplexReferenceParentType.PackageGroup: 95 case ComplexReferenceParentType.PackageGroup:
96 if (groupSymbol.ParentId == "WixChain") 96 if (groupSymbol.ParentId == BurnConstants.BundleChainPackageGroupId)
97 { 97 {
98 referencedPackages.Add(groupSymbol.ChildId); 98 referencedPackages.Add(groupSymbol.ChildId);
99 } 99 }