diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ObjectArrayMessageTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ObjectArrayMessageTest.java index cdfb2c9bd26..8acd13b3d71 100644 --- a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ObjectArrayMessageTest.java +++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ObjectArrayMessageTest.java @@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import org.apache.logging.log4j.test.junit.SerialUtil; import org.junit.jupiter.api.Test; /** @@ -38,4 +39,16 @@ void testGetParameters() { void testGetThrowable() { assertNull(OBJECT_ARRAY_MESSAGE.getThrowable()); } + + /** + * Round-trips through a filtered stream (see {@link SerialUtil#getObjectInputStream}) + * to verify that {@code readObject}'s new {@code SerializationUtil.assertFiltered} + * check accepts streams that carry a filter. + */ + @Test + void testSerializableRoundTripThroughFilteredStream() { + final ObjectArrayMessage original = new ObjectArrayMessage("A", "B", "C"); + final ObjectArrayMessage restored = SerialUtil.deserialize(SerialUtil.serialize(original)); + assertArrayEquals(original.getParameters(), restored.getParameters()); + } } diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java index ffd83974b0a..b30b51f647d 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java @@ -21,6 +21,7 @@ import java.io.ObjectOutputStream; import java.util.Arrays; import org.apache.logging.log4j.util.Constants; +import org.apache.logging.log4j.util.internal.SerializationUtil; /** * Handles messages that contain an Object[]. @@ -117,6 +118,7 @@ public int hashCode() { } private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException { + SerializationUtil.assertFiltered(in); in.defaultReadObject(); array = (Object[]) in.readObject(); } diff --git a/src/changelog/.2.x.x/harden_message_deserialization.xml b/src/changelog/.2.x.x/harden_message_deserialization.xml new file mode 100644 index 00000000000..c21944d7079 --- /dev/null +++ b/src/changelog/.2.x.x/harden_message_deserialization.xml @@ -0,0 +1,11 @@ + + + + Hardened `ObjectArrayMessage.readObject()` to call `SerializationUtil.assertFiltered()` for consistency with `ObjectMessage` and `ParameterizedMessage`. Defense-in-depth only; wire format is unchanged. + +