[
https://issues.apache.org/jira/browse/LOG4J2-1069?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sam Braam closed LOG4J2-1069.
-----------------------------
Verified as fixed
Thanks,
Sam
> Improper handling of JSON escape chars when deserializing JSON log events
> -------------------------------------------------------------------------
>
> Key: LOG4J2-1069
> URL: https://issues.apache.org/jira/browse/LOG4J2-1069
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.3
> Reporter: Sam Braam
> Priority: Minor
> Fix For: 2.4
>
>
> There is an error in the handling of JSON escape characters while determining
> the log event boundaries in a JSON stream. This error is causing log events
> with JSON escaped characters in the message string to be skipped. The
> existing tests do not appear to cover this case, and other serialization
> types are not affected. Here is a test/fix patch:
> {code}
> diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java
>
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java
> index 1b81644..8ed2732 100644
> ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java
> +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java
> @@ -55,8 +55,10 @@ public class JsonInputStreamLogEventBridge extends
> InputStreamLogEventBridge {
> boolean inEsc = false;
> for (int i = start; i < charArray.length; i++) {
> final char c = charArray[i];
> - if (!inEsc) {
> - inEsc = false;
> + if (inEsc) {
> + // Skip this char and continue
> + inEsc = false;
> + } else {
> switch (c) {
> case EVENT_START_MARKER:
> if (!inStr) {
> diff --git
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
>
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
> index 891e278..2bdb3c3 100644
> ---
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
> +++
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
> @@ -69,7 +69,9 @@ public abstract class AbstractSocketServerTest {
> private static final String MESSAGE = "This is test message";
>
> private static final String MESSAGE_2 = "This is test message 2";
> -
> +
> + private static final String MESSAGE_WITH_SPECIAL_CHARS =
> "{This}\n[is]\"n\"a\"\r\ntrue:\n\ttest,\nmessage";
> +
> static final int PORT_NUM = AvailablePortFinder.getNextAvailable();
>
> static final String PORT = String.valueOf(PORT_NUM);
> @@ -158,6 +160,13 @@ public abstract class AbstractSocketServerTest {
> testServer(m1, m2);
> }
> }
> +
> +
> + @Test
> + public void testMessagesWithSpecialChars() throws Exception {
> + testServer(MESSAGE_WITH_SPECIAL_CHARS);
> + }
> +
>
> private void testServer(final int size) throws Exception {
> final String[] messages = new String[size];
> {code}
> The test provided is simplistic and does not attempt to cover all possible
> special characters as the bug has to do with escaped characters in general.
> XML and java serialization handle the special chars in my test string without
> issue - I did not attempt to locate similar cases in the other serialization
> types.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]