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.

Reply via email to