From 8a0d53c5426c46f291b9e2d5ddcdb72c648c4e81 Mon Sep 17 00:00:00 2001 From: a Date: Sun, 1 Mar 2015 00:18:29 +0200 Subject: [PATCH] LOG4J2-964: fix StringFormattedMessage serialization --- .../log4j/message/StringFormattedMessage.java | 3 ++- .../log4j/message/StringFormattedMessageTest.java | 25 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java index f6007e4..9961dec 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java @@ -133,7 +133,8 @@ public class StringFormattedMessage implements Message { stringArgs = new String[argArray.length]; int i = 0; for (final Object obj : argArray) { - stringArgs[i] = obj.toString(); + stringArgs[i] = (obj == null) ? "null" : obj.toString(); + out.writeUTF(stringArgs[i]); ++i; } } diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java index f7c1f0a..5542b48 100644 --- a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java +++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java @@ -18,6 +18,13 @@ package org.apache.logging.log4j.message; import org.junit.Test; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInput; +import java.io.ObjectInputStream; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; + import static org.junit.Assert.*; /** @@ -85,4 +92,22 @@ public class StringFormattedMessageTest { final String actual = msg.getFormattedMessage(); assertEquals("Should use initial param value", "Test message abc", actual); } + + @Test + public void testSerializationAndDeserializationWorks() throws Exception { // LOG4J2-964 + final StringFormattedMessage message = new StringFormattedMessage("hello %s", "there"); + + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + final ObjectOutput out = new ObjectOutputStream(bos); + out.writeObject(message); + final byte[] serialized = bos.toByteArray(); + + final ByteArrayInputStream bis = new ByteArrayInputStream(serialized); + final ObjectInput in = new ObjectInputStream(bis); + final StringFormattedMessage deserialized = (StringFormattedMessage) in.readObject(); + + assertEquals(message.getFormat(), deserialized.getFormat()); + assertEquals(message.getFormattedMessage(), deserialized.getFormattedMessage()); + assertEquals(message.getParameters(), deserialized.getParameters()); + } } -- 1.9.5.msysgit.0