This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new d4be73bb1e [MNG-8513] Be stricter about xml combination modes (#2038) d4be73bb1e is described below commit d4be73bb1ebe89314a683cb3c19230a6029b3c0d Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon Jan 13 08:11:18 2025 +0100 [MNG-8513] Be stricter about xml combination modes (#2038) --- .../org/apache/maven/internal/xml/XmlNodeImpl.java | 39 +++++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/impl/maven-xml/src/main/java/org/apache/maven/internal/xml/XmlNodeImpl.java b/impl/maven-xml/src/main/java/org/apache/maven/internal/xml/XmlNodeImpl.java index 8eef532fca..475a685d17 100644 --- a/impl/maven-xml/src/main/java/org/apache/maven/internal/xml/XmlNodeImpl.java +++ b/impl/maven-xml/src/main/java/org/apache/maven/internal/xml/XmlNodeImpl.java @@ -226,7 +226,7 @@ public class XmlNodeImpl implements Serializable, XmlNode { boolean mergeSelf = true; - String selfMergeMode = dominant.getAttribute(SELF_COMBINATION_MODE_ATTRIBUTE); + String selfMergeMode = getSelfCombinationMode(dominant); if (SELF_COMBINATION_OVERRIDE.equals(selfMergeMode)) { mergeSelf = false; @@ -254,8 +254,8 @@ public class XmlNodeImpl implements Serializable, XmlNode { if (childMergeOverride != null) { mergeChildren = childMergeOverride; } else { - String childMergeMode = attrs.get(CHILDREN_COMBINATION_MODE_ATTRIBUTE); - if (CHILDREN_COMBINATION_APPEND.equals(childMergeMode)) { + String childCombinationMode = getChildCombinationMode(attrs); + if (CHILDREN_COMBINATION_APPEND.equals(childCombinationMode)) { mergeChildren = false; } } @@ -326,8 +326,7 @@ public class XmlNodeImpl implements Serializable, XmlNode { } else if (it.hasNext()) { XmlNode dominantChild = it.next(); - String dominantChildCombinationMode = - dominantChild.getAttribute(SELF_COMBINATION_MODE_ATTRIBUTE); + String dominantChildCombinationMode = getSelfCombinationMode(dominantChild); if (SELF_COMBINATION_REMOVE.equals(dominantChildCombinationMode)) { if (children == null) { children = new ArrayList<>(dominant.getChildren()); @@ -373,6 +372,36 @@ public class XmlNodeImpl implements Serializable, XmlNode { return dominant; } + private static String getChildCombinationMode(Map<String, String> attrs) { + String attribute = attrs.get(CHILDREN_COMBINATION_MODE_ATTRIBUTE); + if (attribute == null) { + return DEFAULT_CHILDREN_COMBINATION_MODE; + } + if (CHILDREN_COMBINATION_APPEND.equals(attribute) || CHILDREN_COMBINATION_MERGE.equals(attribute)) { + return attribute; + } + throw new IllegalArgumentException("Unsupported value '" + attribute + "' for " + + CHILDREN_COMBINATION_MODE_ATTRIBUTE + " attribute. " + "Valid values are: " + + CHILDREN_COMBINATION_APPEND + ", and " + CHILDREN_COMBINATION_MERGE + + " (default is: " + DEFAULT_SELF_COMBINATION_MODE + ")"); + } + + private static String getSelfCombinationMode(XmlNode node) { + String attribute = node.getAttribute(SELF_COMBINATION_MODE_ATTRIBUTE); + if (attribute == null) { + return DEFAULT_SELF_COMBINATION_MODE; + } + if (SELF_COMBINATION_OVERRIDE.equals(attribute) + || SELF_COMBINATION_MERGE.equals(attribute) + || SELF_COMBINATION_REMOVE.equals(attribute)) { + return attribute; + } + throw new IllegalArgumentException("Unsupported value '" + attribute + "' for " + + SELF_COMBINATION_MODE_ATTRIBUTE + " attribute. " + "Valid values are: " + + SELF_COMBINATION_OVERRIDE + ", " + SELF_COMBINATION_MERGE + ", and " + SELF_COMBINATION_REMOVE + + " (default is: " + DEFAULT_SELF_COMBINATION_MODE + ")"); + } + /** * Merge two DOMs, with one having dominance in the case of collision. Merge mechanisms (vs. override for nodes, or * vs. append for children) is determined by attributes of the dominant root node.