You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/09/05 17:41:01 UTC
logging-log4j2 git commit: LOG4J2-1542 Prevent
ArrayIndexOutOfBoundsException in ParameterizedMessage.formatTo for
single-char or empty messages.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 9d4911bad -> 8bd80f346
LOG4J2-1542 Prevent ArrayIndexOutOfBoundsException in ParameterizedMessage.formatTo for single-char or empty messages.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8bd80f34
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8bd80f34
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8bd80f34
Branch: refs/heads/master
Commit: 8bd80f34668af8120757b4f8eda6abc24de26a2d
Parents: 9d4911b
Author: rpopma <rp...@apache.org>
Authored: Tue Sep 6 02:40:57 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Sep 6 02:40:57 2016 +0900
----------------------------------------------------------------------
.../log4j/message/ParameterizedMessage.java | 13 ++++++-----
.../log4j/message/ParameterizedMessageTest.java | 24 ++++++++++++++++++++
src/changes/changes.xml | 3 +++
3 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8bd80f34/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
index 0994d00..6936a53 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
@@ -29,10 +29,10 @@ import org.apache.logging.log4j.util.StringBuilderFormattable;
* </p>
*/
public class ParameterizedMessage implements Message, StringBuilderFormattable {
-
+
// Should this be configurable?
private static final int DEFAULT_STRING_BUILDER_SIZE = 255;
-
+
/**
* Prefix for recursion.
*/
@@ -46,17 +46,17 @@ public class ParameterizedMessage implements Message, StringBuilderFormattable {
* Prefix for errors.
*/
public static final String ERROR_PREFIX = ParameterFormatter.ERROR_PREFIX;
-
+
/**
* Separator for errors.
*/
public static final String ERROR_SEPARATOR = ParameterFormatter.ERROR_SEPARATOR;
-
+
/**
* Separator for error messages.
*/
public static final String ERROR_MSG_SEPARATOR = ParameterFormatter.ERROR_MSG_SEPARATOR;
-
+
/**
* Suffix for errors.
*/
@@ -142,7 +142,8 @@ public class ParameterizedMessage implements Message, StringBuilderFormattable {
private void init(final String messagePattern) {
this.messagePattern = messagePattern;
- this.indices = new int[messagePattern == null ? 0 : messagePattern.length() >> 1]; // divide by 2
+ final int len = Math.max(1, messagePattern == null ? 0 : messagePattern.length() >> 1); // divide by 2
+ this.indices = new int[len]; // LOG4J2-1542 ensure non-zero array length
final int placeholders = ParameterFormatter.countArgumentPlaceholders2(messagePattern, indices);
initThrowable(argArray, placeholders);
this.usedCount = Math.min(placeholders, argArray == null ? 0 : argArray.length);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8bd80f34/log4j-api/src/test/java/org/apache/logging/log4j/message/ParameterizedMessageTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/ParameterizedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/ParameterizedMessageTest.java
index ac9895e..c9dc152 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/ParameterizedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/ParameterizedMessageTest.java
@@ -39,6 +39,30 @@ public class ParameterizedMessageTest {
}
@Test
+ public void testZeroLength() {
+ final String testMsg = "";
+ ParameterizedMessage msg = new ParameterizedMessage(testMsg, new String[]{"arg"});
+ String result = msg.getFormattedMessage();
+ assertEquals(testMsg, result);
+ final Object[] array = null;
+ msg = new ParameterizedMessage(testMsg, array, null);
+ result = msg.getFormattedMessage();
+ assertEquals(testMsg, result);
+ }
+
+ @Test
+ public void testOneCharLength() {
+ final String testMsg = "d";
+ ParameterizedMessage msg = new ParameterizedMessage(testMsg, new String[]{"arg"});
+ String result = msg.getFormattedMessage();
+ assertEquals(testMsg, result);
+ final Object[] array = null;
+ msg = new ParameterizedMessage(testMsg, array, null);
+ result = msg.getFormattedMessage();
+ assertEquals(testMsg, result);
+ }
+
+ @Test
public void testFormat3StringArgs() {
final String testMsg = "Test message {}{} {}";
final String[] args = { "a", "b", "c" };
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8bd80f34/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 535e1ba..d884991 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+ <action issue="LOG4J2-1542" dev="rpopma" type="fix" due-to="Rog�rio Lecari�o Leite">
+ Prevent ArrayIndexOutOfBoundsException in ParameterizedMessage.formatTo for single-char or empty messages.
+ </action>
<action issue="LOG4J2-1549" dev="mikes" type="fix" due-to="Jason Bedard">
AsyncLoggerContextSelector+PropertiesConfigurationBuilder defaults to includeLocation=true.
</action>