Repository: logging-log4j2 Updated Branches: refs/heads/master 43fb9e1ef -> 52461585e
[LOG4J2-1216] Nested pattern layout options broken. Apply slightly tweaked patch for formatting. Fix hang and more tests. Closes #116. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/52461585 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/52461585 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/52461585 Branch: refs/heads/master Commit: 52461585ed34153dc1470acbf2d43aac9bc81944 Parents: 43fb9e1 Author: GFriedrich <[email protected]> Authored: Thu Oct 12 15:43:53 2017 -0600 Committer: Gary Gregory <[email protected]> Committed: Thu Oct 12 15:43:53 2017 -0600 ---------------------------------------------------------------------- .../log4j/core/pattern/PatternParser.java | 8 ++++++- .../log4j/core/pattern/PatternParserTest.java | 25 +++++++++++++------- src/changes/changes.xml | 2 +- 3 files changed, 24 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/52461585/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java index 5260b11..91c11ec 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java @@ -287,7 +287,13 @@ public final class PatternParser { } // while if (depth > 0) { // option not closed, continue with pattern after closing bracket - return pattern.indexOf('}', start) + 1; + i = pattern.lastIndexOf('}'); + if (i == -1 || i < start) { + // if no closing bracket could be found or there is no closing bracket behind the starting + // character of our parsing process continue parsing after the first opening bracket + return begin; + } + return i + 1; } options.add(pattern.substring(begin, i - 1)); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/52461585/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java index 1b68c0d..da93afe 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java @@ -161,7 +161,6 @@ public class PatternParserTest { assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected)); } - @Test public void testBadPattern() { final Calendar cal = Calendar.getInstance(); @@ -230,18 +229,12 @@ public class PatternParserTest { @Test public void testNanoPatternShort() { - final List<PatternFormatter> formatters = parser.parse("%N"); - assertNotNull(formatters); - assertEquals(1, formatters.size()); - assertTrue(formatters.get(0).getConverter() instanceof NanoTimePatternConverter); + testFirstConverter("%N", NanoTimePatternConverter.class); } @Test public void testNanoPatternLong() { - final List<PatternFormatter> formatters = parser.parse("%nano"); - assertNotNull(formatters); - assertEquals(1, formatters.size()); - assertTrue(formatters.get(0).getConverter() instanceof NanoTimePatternConverter); + testFirstConverter("%nano", NanoTimePatternConverter.class); } @Test @@ -348,6 +341,20 @@ public class PatternParserTest { formatters.get(0).format(event, buf); final String expected = " 123 "; assertEquals(expected, buf.toString()); + } + + @Test + public void testMissingClosingBracket() { + testFirstConverter("%d{", DatePatternConverter.class); + } + + @Test + public void testClosingBracketButWrongPlace() { + final List<PatternFormatter> formatters = parser.parse("}%d{"); + assertNotNull(formatters); + assertEquals(2, formatters.size()); + validateConverter(formatters, 0, "Literal"); + validateConverter(formatters, 1, "Date"); } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/52461585/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 24a084e..d989e0e 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -62,7 +62,7 @@ <action issue="LOG4J2-2053" dev="ggregory" type="fix"> Exception java.nio.charset.UnsupportedCharsetException: cp65001 in 2.9.0. </action> - <action issue="LOG4J2-1216" dev="ggregory" type="fix" due-to="Thies Wellpott, Barna Zsombor Klara"> + <action issue="LOG4J2-1216" dev="ggregory" type="fix" due-to="Thies Wellpott, Barna Zsombor Klara, GFriedrich"> Nested pattern layout options broken. </action> <action issue="LOG4J2-2070" dev="ggregory" type="fix" due-to="Doug Hughes">
