aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-04-25 17:53:51 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-04-26 12:59:15 -0500
commitc3fa0b4cfe33109244d6f4e1c12d79abb7b28864 (patch)
tree4d505b1354c6fd3867ed821436c2e905c9efb710 /src
parent0ee63890d8eacd044115524476eb9419114500a7 (diff)
downloadwix-c3fa0b4cfe33109244d6f4e1c12d79abb7b28864.tar.gz
wix-c3fa0b4cfe33109244d6f4e1c12d79abb7b28864.tar.bz2
wix-c3fa0b4cfe33109244d6f4e1c12d79abb7b28864.zip
Enforce that Update and RemoteBundle can only be specified once.
Also, RemoteBundle is required if BundlePackagePayload is remote.
Diffstat (limited to 'src')
-rw-r--r--src/wix/WixToolset.Core/Compiler_Bundle.cs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/wix/WixToolset.Core/Compiler_Bundle.cs b/src/wix/WixToolset.Core/Compiler_Bundle.cs
index bd1d70f3..88188f6b 100644
--- a/src/wix/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/wix/WixToolset.Core/Compiler_Bundle.cs
@@ -309,6 +309,7 @@ namespace WixToolset.Core
309 309
310 var chainSeen = false; 310 var chainSeen = false;
311 var logSeen = false; 311 var logSeen = false;
312 var updateSeen = false;
312 313
313 foreach (var child in node.Elements()) 314 foreach (var child in node.Elements())
314 { 315 {
@@ -386,7 +387,13 @@ namespace WixToolset.Core
386 this.ParseBundleTagElement(child); 387 this.ParseBundleTagElement(child);
387 break; 388 break;
388 case "Update": 389 case "Update":
390 if (updateSeen)
391 {
392 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
393 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Update"));
394 }
389 this.ParseUpdateElement(child); 395 this.ParseUpdateElement(child);
396 updateSeen = true;
390 break; 397 break;
391 case "Variable": 398 case "Variable":
392 this.ParseVariableElement(child); 399 this.ParseVariableElement(child);
@@ -2670,6 +2677,8 @@ namespace WixToolset.Core
2670 this.Core.ParseExtensionAttribute(node, extensionAttribute, context); 2677 this.Core.ParseExtensionAttribute(node, extensionAttribute, context);
2671 } 2678 }
2672 2679
2680 var remoteBundleSeen = false;
2681
2673 foreach (var child in node.Elements()) 2682 foreach (var child in node.Elements())
2674 { 2683 {
2675 if (CompilerCore.WixNamespace == child.Name.Namespace) 2684 if (CompilerCore.WixNamespace == child.Name.Namespace)
@@ -2682,7 +2691,13 @@ namespace WixToolset.Core
2682 2691
2683 if (allowed) 2692 if (allowed)
2684 { 2693 {
2694 if (remoteBundleSeen)
2695 {
2696 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
2697 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "RemoteBundle"));
2698 }
2685 this.ParseRemoteBundleElement(child, compilerPayload.Id.Id); 2699 this.ParseRemoteBundleElement(child, compilerPayload.Id.Id);
2700 remoteBundleSeen = true;
2686 } 2701 }
2687 2702
2688 break; 2703 break;
@@ -2702,6 +2717,12 @@ namespace WixToolset.Core
2702 } 2717 }
2703 } 2718 }
2704 2719
2720 var isLocal = !String.IsNullOrEmpty(compilerPayload.SourceFile);
2721 if (packageType == WixBundlePackageType.Bundle && !isLocal && !remoteBundleSeen)
2722 {
2723 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "RemoteBundle"));
2724 }
2725
2705 return compilerPayload; 2726 return compilerPayload;
2706 } 2727 }
2707 2728