This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch prevent_stack_overflow
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit 131471795c6549137e435f6d80c36b28e7d7fabe
Author: Stephen Webb <[email protected]>
AuthorDate: Tue Apr 28 14:59:52 2026 +1000

    Reduce stack overflow likelihood processing XML configurations
---
 src/main/cpp/domconfigurator.cpp | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index 6daa4a3f..0f7352e9 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -218,24 +218,24 @@ Used internally to parse appenders by IDREF name.
 AppenderPtr 
DOMConfigurator::DOMConfiguratorPrivate::findAppenderByName(apr_xml_elem* 
element, const LogString& appenderName)
 {
        AppenderPtr appender;
-       std::string tagName(element->name);
 
-       if (tagName == APPENDER_TAG)
+       while (element)
        {
-               if (appenderName == getAttribute(element, NAME_ATTR))
+               if (std::string(element->name) == APPENDER_TAG)
                {
-                       appender = parseAppender(element);
+                       if (appenderName == getAttribute(element, NAME_ATTR))
+                       {
+                               if (appender = parseAppender(element))
+                                       break;
+                       }
                }
-       }
 
-       if (element->first_child && !appender)
-       {
-               appender = findAppenderByName(element->first_child, 
appenderName);
-       }
-
-       if (element->next && !appender)
-       {
-               appender = findAppenderByName(element->next, appenderName);
+               if (element->first_child)
+               {
+                       if (appender = findAppenderByName(element->first_child, 
appenderName))
+                               break;
+               }
+               element = element->next;
        }
 
        return appender;

Reply via email to