diff --git a/commons-digester3-core/pom.xml b/commons-digester3-core/pom.xml
index 763cd337c..d04cf94f4 100644
--- a/commons-digester3-core/pom.xml
+++ b/commons-digester3-core/pom.xml
@@ -34,6 +34,11 @@
Apache Commons Digester :: Core
+
+ org.apache.commons
+ commons-secure-xml
+ 1.0.0
+
cglib
cglib
diff --git a/commons-digester3-core/src/main/java/org/apache/commons/digester3/Digester.java b/commons-digester3-core/src/main/java/org/apache/commons/digester3/Digester.java
index 5aa17f36f..dc8a7781a 100644
--- a/commons-digester3-core/src/main/java/org/apache/commons/digester3/Digester.java
+++ b/commons-digester3-core/src/main/java/org/apache/commons/digester3/Digester.java
@@ -48,6 +48,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.commons.xml.secure.SecureSAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.EntityResolver;
@@ -1589,7 +1590,7 @@ public SAXParserFactory getFactory()
{
if ( factory == null )
{
- factory = SAXParserFactory.newInstance();
+ factory = SecureSAXParserFactory.newInstance();
factory.setNamespaceAware( namespaceAware );
factory.setXIncludeAware( xincludeAware );
factory.setValidating( validating );
diff --git a/commons-digester3-core/src/main/java/org/apache/commons/digester3/NodeCreateRule.java b/commons-digester3-core/src/main/java/org/apache/commons/digester3/NodeCreateRule.java
index 87bd7ef21..7882fab47 100644
--- a/commons-digester3-core/src/main/java/org/apache/commons/digester3/NodeCreateRule.java
+++ b/commons-digester3-core/src/main/java/org/apache/commons/digester3/NodeCreateRule.java
@@ -23,6 +23,7 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.commons.xml.secure.SecureDocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
@@ -335,7 +336,7 @@ public NodeCreateRule( final DocumentBuilder documentBuilder )
public NodeCreateRule( final int nodeType )
throws ParserConfigurationException
{
- this( nodeType, DocumentBuilderFactory.newInstance().newDocumentBuilder() );
+ this( nodeType, SecureDocumentBuilderFactory.newInstance().newDocumentBuilder() );
}
/**
diff --git a/commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java b/commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
index 0fa0c2069..8cf5cd20e 100644
--- a/commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
+++ b/commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
@@ -43,6 +43,7 @@
import org.apache.commons.digester3.RulesBase;
import org.apache.commons.digester3.StackAction;
import org.apache.commons.digester3.Substitutor;
+import org.apache.commons.xml.secure.SecureSAXParserFactory;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.Locator;
@@ -107,7 +108,7 @@ public static DigesterLoader newLoader( final RulesModule... rulesModules )
/**
* The SAXParserFactory to create new default {@link Digester} instances.
*/
- private final SAXParserFactory factory = SAXParserFactory.newInstance();
+ private final SAXParserFactory factory = SecureSAXParserFactory.newInstance();
private final Iterable rulesModules;
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 241d9c42e..645b96cc1 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -27,6 +27,9 @@
Add DefaultThrowingErrorHandler to Digester API.
Add Maven property project.build.outputTimestamp for build reproducibility.
+
+ Create SAX parser and document builder factories through org.apache.commons:commons-secure-xml, which bounds entity expansion and enables XML secure processing.
+
Regression: DigesterTestCase#testPopNamedStackNotPushed expects EmptyStackException.