svn commit: r1936807 - in apr/apr-util/branches/1.7.x: . test test/data xml

[email protected] Mon, 03 Aug 2026 12:14:59 -0000
Newsgroups gmane.comp.apache.apr.cvs
Message-ID <178575929985.1825073.15869349952254198209@svn03-he-fi>
Author: covener
Date: Mon Aug  3 12:14:59 2026
New Revision: 1936807

Log:
limit XML processing depth

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

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

Modified: apr/apr-util/branches/1.7.x/CMakeLists.txt
==============================================================================
--- apr/apr-util/branches/1.7.x/CMakeLists.txt	Mon Aug  3 12:12:58 2026	(r1936806)
+++ apr/apr-util/branches/1.7.x/CMakeLists.txt	Mon Aug  3 12:14:59 2026	(r1936807)
@@ -396,6 +396,9 @@ IF(APU_BUILD_TEST)
   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(BUILD_SHARED_LIBS)
     SET(whichapr    "apr::libapr-1;libaprutil-1")

Added: apr/apr-util/branches/1.7.x/test/data/nesting.xml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ apr/apr-util/branches/1.7.x/test/data/nesting.xml	Mon Aug  3 12:14:59 2026	(r1936807)
@@ -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.7.x/test/testxml.c
==============================================================================
--- apr/apr-util/branches/1.7.x/test/testxml.c	Mon Aug  3 12:12:58 2026	(r1936806)
+++ apr/apr-util/branches/1.7.x/test/testxml.c	Mon Aug  3 12:14:59 2026	(r1936807)
@@ -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.7.x/xml/apr_xml.c
==============================================================================
--- apr/apr-util/branches/1.7.x/xml/apr_xml.c	Mon Aug  3 12:12:58 2026	(r1936806)
+++ apr/apr-util/branches/1.7.x/xml/apr_xml.c	Mon Aug  3 12:14:59 2026	(r1936807)
@@ -45,6 +45,10 @@ static const char APR_KW_xmlns_lang[] =
           (name[2] == 0x4C || name[2] == 0x6C) )
 
 
+#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 */
@@ -131,6 +135,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 */
@@ -304,6 +313,8 @@ static void end_handler(void *userdata,
     if (parser->error)
         return;
 
+    parser->depth--;
+
     /* pop up one level */
     parser->cur_elem = parser->cur_elem->parent;
 }
@@ -391,6 +402,11 @@ APU_DECLARE(char *) apr_xml_parser_geter
                             parser->xp_msg, 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;

Modified: apr/apr-util/branches/1.7.x/xml/apr_xml_internal.h
==============================================================================
--- apr/apr-util/branches/1.7.x/xml/apr_xml_internal.h	Mon Aug  3 12:12:58 2026	(r1936806)
+++ apr/apr-util/branches/1.7.x/xml/apr_xml_internal.h	Mon Aug  3 12:14:59 2026	(r1936807)
@@ -40,8 +40,11 @@ struct apr_xml_parser {
     int error;
 #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;
     /** the actual (Expat) XML parser */
     XML_Parser xp;
     /** stored Expat error code */