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;