Thies Wellpott created LOG4J2-1216:
--------------------------------------
Summary: Nested pattern layout options broken
Key: LOG4J2-1216
URL: https://issues.apache.org/jira/browse/LOG4J2-1216
Project: Log4j 2
Issue Type: Bug
Components: Pattern Converters
Affects Versions: 2.4.1
Reporter: Thies Wellpott
Parsing the "deeply" nested PatternLayout
{code}
%maxLen{[XXX, ${hostName}, ${web:contextPath}] %p: %c{1} - %m%notEmpty{
=>%ex{short}}}{160}
{code}
(with %maxLen being a custom Converter)
results in wrong parsing.
Patternparser.extractOptions() gets the nesting wrong.
Solution:
{code}
private static int extractOptions(final String pattern, final int start, final
List<String> options) {
int i = start;
while (i < pattern.length() && pattern.charAt(i) == '{') {
i++; // skip opening "{"
final int begin = i; // position of first real char
int depth = 1; // already inside one level
while (depth > 0 && i < pattern.length()) {
char c = pattern.charAt(i);
if (c == '{') {
depth++;
} else if (c == '}') {
depth--;
// TODO(?) maybe escaping of { and } with \ or %
}
i++;
} // while
if (depth > 0) { // option not closed, continue with pattern
on opening "{"
return begin-1;
}
options.add(pattern.substring(begin, i-1));
} // while
return i;
}
{code}
This should also be faster than the current implementation because the pattern
ist only walked once, not multiple times with indexOf().
(LOG4J2-107 is a similar but old bug)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]