svn commit: r1936815 - in apr/apr-util/branches/1.6.x: . test test/data xml

[email protected] Mon, 03 Aug 2026 12:34:32 -0000
Newsgroups gmane.comp.apache.apr.cvs
Message-ID <178576047296.1837593.3674372001456539109@svn03-he-fi>
Author: jorton
Date: Mon Aug  3 12:34:32 2026
New Revision: 1936815

Log:
Merge r1936807 from 1.7.x:

limit XML processing depth

Submitted By: jorton
Reviewed By: jorton, jfclere, ivan

Added:
   apr/apr-util/branches/1.6.x/test/data/nesting.xml
Modified:
   apr/apr-util/branches/1.6.x/CMakeLists.txt
   apr/apr-util/branches/1.6.x/test/testxml.c
   apr/apr-util/branches/1.6.x/xml/apr_xml.c

Modified: apr/apr-util/branches/1.6.x/CMakeLists.txt
==============================================================================
--- apr/apr-util/branches/1.6.x/CMakeLists.txt	Mon Aug  3 12:34:29 2026	(r1936814)
+++ apr/apr-util/branches/1.6.x/CMakeLists.txt	Mon Aug  3 12:34:32 2026	(r1936815)
@@ -288,6 +288,9 @@ IF(APR_BUILD_TESTAPR)
   EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different 
                   ${PROJECT_SOURCE_DIR}/test/data/billion-laughs.xml
                   ${PROJECT_BINARY_DIR}/data/billion-laughs.xml)
+  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different 
+                  ${PROJECT_SOURCE_DIR}/test/data/nesting.xml
+                  ${PROJECT_BINARY_DIR}/data/nesting.xml)
 
   IF(TEST_STATIC_LIBS)
     SET(whichapr    aprutil-1)

Added: apr/apr-util/branches/1.6.x/test/data/nesting.xml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ apr/apr-util/branches/1.6.x/test/data/nesting.xml	Mon Aug  3 12:34:32 2026	(r1936815)
@@ -0,0 +1,2001 @@
+<?xml version="1.0"?>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+<n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>
+</n>

Modified: apr/apr-util/branches/1.6.x/test/testxml.c
==============================================================================
--- apr/apr-util/branches/1.6.x/test/testxml.c	Mon Aug  3 12:34:29 2026	(r1936814)
+++ apr/apr-util/branches/1.6.x/test/testxml.c	Mon Aug  3 12:34:32 2026	(r1936815)
@@ -20,6 +20,10 @@
 #include "abts.h"
 #include "testutil.h"
 
+#ifndef APR_XML_MAX_DEPTH
+#define APR_XML_MAX_DEPTH 256
+#endif
+
 static apr_status_t create_dummy_file_error(abts_case *tc, apr_pool_t *p,
                                             apr_file_t **fd)
 {
@@ -166,6 +170,33 @@ static void test_billion_laughs(abts_cas
     apr_file_close(fd);
 }
 
+static void test_nesting_limit(abts_case *tc, void *data)
+{
+    apr_file_t *fd;
+    apr_xml_parser *parser = NULL;
+    apr_xml_doc *doc;
+    apr_status_t rv;
+    char errbuf[256], *err;
+
+    rv = apr_file_open(&fd, "data/nesting.xml",
+                       APR_FOPEN_READ, 0, p);
+    APR_ASSERT_SUCCESS(tc, "open nesting.xml", rv);
+
+    rv = apr_xml_parse_file(p, &parser, &doc, fd, 2000);
+    ABTS_TRUE(tc, rv != APR_SUCCESS);
+
+    if (parser) {
+        err = apr_xml_parser_geterror(parser, errbuf, sizeof errbuf);
+        ABTS_STR_EQUAL(tc,
+                       "The maximum element nesting limit "
+                       "(" APR_STRINGIFY(APR_XML_MAX_DEPTH) ")"
+                       " was exceeded.",
+                       err);
+    }
+
+    apr_file_close(fd);
+}
+
 static void test_CVE_2009_3720_alpha(abts_case *tc, void *data)
 {
     apr_xml_parser *xp;
@@ -198,6 +229,7 @@ abts_suite *testxml(abts_suite *suite)
 
     abts_run_test(suite, test_xml_parser, NULL);
     abts_run_test(suite, test_billion_laughs, NULL);
+    abts_run_test(suite, test_nesting_limit, NULL);
     abts_run_test(suite, test_CVE_2009_3720_alpha, NULL);
     abts_run_test(suite, test_CVE_2009_3720_beta, NULL);
 

Modified: apr/apr-util/branches/1.6.x/xml/apr_xml.c
==============================================================================
--- apr/apr-util/branches/1.6.x/xml/apr_xml.c	Mon Aug  3 12:34:29 2026	(r1936814)
+++ apr/apr-util/branches/1.6.x/xml/apr_xml.c	Mon Aug  3 12:34:32 2026	(r1936815)
@@ -61,12 +61,19 @@ struct apr_xml_parser {
     int error;			/* an error has occurred */
 #define APR_XML_ERROR_EXPAT             1
 #define APR_XML_ERROR_PARSE_DONE        2
-/* also: public APR_XML_NS_ERROR_* values (if any) */
+#define APR_XML_ERROR_DEPTH_LIMIT       3
 
+/* also: public APR_XML_NS_ERROR_* values (if any) */
+    /** depth of element tree. */
+    unsigned int depth;
     XML_Parser xp;              /* the actual (Expat) XML parser */
     enum XML_Error xp_err;      /* stored Expat error code */
 };
 
+#ifndef APR_XML_MAX_DEPTH
+#define APR_XML_MAX_DEPTH 256
+#endif
+
 /* struct for scoping namespace declarations */
 typedef struct apr_xml_ns_scope {
     const char *prefix;		/* prefix used for this ns */
@@ -154,6 +161,11 @@ static void start_handler(void *userdata
     if (parser->error)
 	return;
 
+    if (++parser->depth > APR_XML_MAX_DEPTH) {
+        parser->error = APR_XML_ERROR_DEPTH_LIMIT;
+        return;
+    }
+
     elem = apr_pcalloc(parser->p, sizeof(*elem));
 
     /* prep the element */
@@ -327,6 +339,8 @@ static void end_handler(void *userdata,
     if (parser->error)
 	return;
 
+    parser->depth--;
+
     /* pop up one level */
     parser->cur_elem = parser->cur_elem->parent;
 }
@@ -499,6 +513,11 @@ APU_DECLARE(char *) apr_xml_parser_geter
                             XML_ErrorString(parser->xp_err), parser->xp_err);
         return errbuf;
 
+    case APR_XML_ERROR_DEPTH_LIMIT:
+        msg = "The maximum element nesting limit ("
+            APR_STRINGIFY(APR_XML_MAX_DEPTH) ") was exceeded.";
+        break;
+
     case APR_XML_ERROR_PARSE_DONE:
         msg = "The parser is not active.";
         break;