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>