Hardens PropertiesUtil
against recursive property sources
#3263
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As showed in #3252, Spring's
JndiPropertySource
not only can throw exceptions, but can also perform logging calls. Such a call causes a recursive call toPropertiesUtil.getProperty("log4j2.flowMessageFactory"
) and aStackOverflowException
in the best scenario. The worst scenario includes a deadlock.This PR:
MessageFactory
andFlowMessageFactory
to the static initializer ofLoggerContext
. This should be close enough to the pre-2.23.0 location inAbstractLogger
. TheLoggerContext
class is usually initialized, before Spring Boot adds its property sources toPropertiesUtil
.PropertiesUtil
to ignore recursive calls.Closes #3252.