This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.2.x-fixes by this push:
     new d880b69  Adding more StaxUtils tests
d880b69 is described below

commit d880b692dcdd35b9ce769329402ad8fa22bcf940
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Thu Apr 30 07:46:41 2020 +0100

    Adding more StaxUtils tests
    
    (cherry picked from commit 337b24aa40b397448caafbec65465e1181b1e1b7)
    (cherry picked from commit b54e4047e5c9117d870c9a2df8db9a818890431a)
---
 .../org/apache/cxf/staxutils/StaxUtilsTest.java    | 144 ++++++++++++++++++++-
 1 file changed, 143 insertions(+), 1 deletion(-)

diff --git a/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java 
b/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java
index e38d939..a47c9ee 100644
--- a/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java
+++ b/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java
@@ -30,6 +30,7 @@ import java.io.Writer;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.stream.events.XMLEvent;
@@ -65,15 +66,17 @@ public class StaxUtilsTest extends Assert {
     private InputStream getTestStream(String resource) {
         return getClass().getResourceAsStream(resource);
     }
+
     @Test
     public void testCommentNode() throws Exception {
         //CXF-3034
         Document document = DocumentBuilderFactory.newInstance()
-            .newDocumentBuilder().newDocument();
+                .newDocumentBuilder().newDocument();
         Element root = document.createElementNS("urn:test", "root");
         root.appendChild(document.createComment("test comment"));
         StaxUtils.copy(StaxUtils.createXMLStreamReader(root), 
StaxUtils.createXMLStreamWriter(System.out));
     }
+
     @Test
     public void testToNextElement() {
         String soapMessage = "./resources/sayHiRpcLiteralReq.xml";
@@ -479,4 +482,143 @@ public class StaxUtilsTest extends Assert {
         //System.out.println(sw.toString());
         assertEquals(innerXml, sw.toString());
     }
+
+    @Test
+    public void testIsSecureReader() {
+        Document doc = DOMUtils.newDocument();
+        Element documentElement = doc.createElementNS(null, "root");
+        doc.appendChild(documentElement);
+
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        assertTrue(StaxUtils.isSecureReader(reader, null));
+    }
+
+    @Test
+    public void testDefaultMaxAttributeCount() throws XMLStreamException {
+        Document doc = DOMUtils.newDocument();
+        Element documentElement = doc.createElementNS(null, "root");
+        doc.appendChild(documentElement);
+
+        for (int i = 0; i < 300; i++) {
+            documentElement.setAttributeNS(null, "attr-" + i, 
Integer.toString(i));
+        }
+
+        // Should be OK
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        assertNotNull(StaxUtils.read(reader));
+
+        for (int i = 300; i < 800; i++) {
+            documentElement.setAttributeNS(null, "attr-" + i, 
Integer.toString(i));
+        }
+
+        assertTrue(documentElement.getAttributes().getLength() > 500);
+
+        // Should fail as we are over the max attribute count
+        reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        try {
+            StaxUtils.read(reader);
+            fail("Failure expected on exceeding the limit");
+        } catch (XMLStreamException ex) {
+            assertTrue(ex.getMessage().contains("Attribute limit"));
+        }
+    }
+
+    @Test
+    public void testDefaultMaxAttributeLength() throws XMLStreamException {
+        Document doc = DOMUtils.newDocument();
+        Element documentElement = doc.createElementNS(null, "root");
+        doc.appendChild(documentElement);
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < 1024; i++) {
+            sb.append(i);
+        }
+
+        documentElement.setAttributeNS(null, "attr", sb.toString());
+
+        // Should be OK
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        assertNotNull(StaxUtils.read(reader));
+
+        for (int i = 0; i < 1024 * 64; i++) {
+            sb.append(i);
+        }
+
+        documentElement.setAttributeNS(null, "attr", sb.toString());
+        assertTrue(documentElement.getAttributeNS(null, "attr").length() > 
(1024 * 64));
+
+        // Should fail as we are over the max attribute length
+        reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        try {
+            StaxUtils.read(reader);
+            fail("Failure expected on exceeding the limit");
+        } catch (XMLStreamException ex) {
+            assertTrue(ex.getMessage().contains("Maximum attribute size 
limit"));
+        }
+
+    }
+
+    @Test
+    public void testDefaultMaxElementDepth() throws XMLStreamException {
+        Document doc = DOMUtils.newDocument();
+        Element documentElement = doc.createElementNS(null, "root");
+        doc.appendChild(documentElement);
+
+        Element currentNode = documentElement;
+        for (int i = 0; i < 50; i++) {
+            Element childElement = doc.createElementNS("null", "root" + i);
+            currentNode.appendChild(childElement);
+            currentNode = childElement;
+        }
+
+        // Should be OK
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        assertNotNull(StaxUtils.read(reader));
+
+        for (int i = 50; i < 102; i++) {
+            Element childElement = doc.createElementNS("null", "root" + i);
+            currentNode.appendChild(childElement);
+            currentNode = childElement;
+        }
+
+        // Should fail as we are over the max element depth value
+        reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        try {
+            StaxUtils.read(reader);
+            fail("Failure expected on exceeding the limit");
+        } catch (XMLStreamException ex) {
+            assertTrue(ex.getMessage().contains("Maximum Element Depth 
limit"));
+        }
+    }
+
+    @Test
+    public void testDefaultMaxChildElements() throws XMLStreamException {
+        Document doc = DOMUtils.newDocument();
+        Element documentElement = doc.createElementNS(null, "root");
+        doc.appendChild(documentElement);
+
+        for (int i = 0; i < 1000; i++) {
+            Element childElement = doc.createElementNS("null", "root" + i);
+            documentElement.appendChild(childElement);
+        }
+
+        // Should be OK
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        assertNotNull(StaxUtils.read(reader));
+
+        for (int i = 0; i < 49001; i++) {
+            Element childElement = doc.createElementNS("null", "root" + i);
+            documentElement.appendChild(childElement);
+        }
+
+        // Should fail as we are over the max element count value
+        reader = StaxUtils.createXMLStreamReader(new 
StringReader(StaxUtils.toString(doc)));
+        try {
+            StaxUtils.read(reader);
+            fail("Failure expected on exceeding the limit");
+        } catch (XMLStreamException ex) {
+            assertTrue(ex.getMessage().contains("Maximum Number of Child 
Elements limit"));
+        }
+    }
+
 }

Reply via email to