diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c3d9b7d29..dc0f79327 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -68,6 +68,8 @@ jobs: # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 + env: + MAVEN_ARGS: -Puse-apache-snapshots # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c42810878..826dc7c9d 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -54,4 +54,4 @@ jobs: distribution: 'temurin' java-version: ${{ matrix.java }} - name: Build with Maven - run: mvn --errors --show-version --batch-mode --no-transfer-progress -Ddoclint=none + run: mvn --errors --show-version --batch-mode --no-transfer-progress -Ddoclint=none -Puse-apache-snapshots diff --git a/commons-digester3-core/pom.xml b/commons-digester3-core/pom.xml index 763cd337c..9947a09be 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-SNAPSHOT + 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..303c6de7c 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.