From c3fa0b4cfe33109244d6f4e1c12d79abb7b28864 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 25 Apr 2022 17:53:51 -0500 Subject: Enforce that Update and RemoteBundle can only be specified once. Also, RemoteBundle is required if BundlePackagePayload is remote. --- src/wix/WixToolset.Core/Compiler_Bundle.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') 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 var chainSeen = false; var logSeen = false; + var updateSeen = false; foreach (var child in node.Elements()) { @@ -386,7 +387,13 @@ namespace WixToolset.Core this.ParseBundleTagElement(child); break; case "Update": + if (updateSeen) + { + var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); + this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Update")); + } this.ParseUpdateElement(child); + updateSeen = true; break; case "Variable": this.ParseVariableElement(child); @@ -2670,6 +2677,8 @@ namespace WixToolset.Core this.Core.ParseExtensionAttribute(node, extensionAttribute, context); } + var remoteBundleSeen = false; + foreach (var child in node.Elements()) { if (CompilerCore.WixNamespace == child.Name.Namespace) @@ -2682,7 +2691,13 @@ namespace WixToolset.Core if (allowed) { + if (remoteBundleSeen) + { + var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); + this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "RemoteBundle")); + } this.ParseRemoteBundleElement(child, compilerPayload.Id.Id); + remoteBundleSeen = true; } break; @@ -2702,6 +2717,12 @@ namespace WixToolset.Core } } + var isLocal = !String.IsNullOrEmpty(compilerPayload.SourceFile); + if (packageType == WixBundlePackageType.Bundle && !isLocal && !remoteBundleSeen) + { + this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "RemoteBundle")); + } + return compilerPayload; } -- cgit v1.2.3-55-g6feb