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;
