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/03/28 14:06:28 UTC

logging-log4j2 git commit: LOG4J2-1271 bugfix: fast path logic should correctly handle edge cases where number of placeholders is more or less than specified parameter values

Repository: logging-log4j2
Updated Branches:
  refs/heads/master a21828565 -> 7ed099099


LOG4J2-1271 bugfix: fast path logic should correctly handle edge cases where number of placeholders is more or less than specified parameter values


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/7ed09909
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/7ed09909
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/7ed09909

Branch: refs/heads/master
Commit: 7ed099099189d556656b92e7e32a619728201e60
Parents: a218285
Author: rpopma <rp...@apache.org>
Authored: Mon Mar 28 21:06:30 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Mar 28 21:06:30 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/message/ParameterizedMessage.java       | 10 +++++-----
 .../log4j/message/ReusableParameterizedMessage.java       |  7 +++----
 .../log4j/message/ReusableParameterizedMessageTest.java   |  6 +++++-
 3 files changed, 13 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7ed09909/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 e1ef2a5..8ad42b6 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
@@ -68,6 +68,7 @@ public class ParameterizedMessage implements Message, StringBuilderFormattable {
     private String formattedMessage;
     private transient Throwable throwable;
     private int[] indices;
+    private int usedCount;
 
     /**
      * Creates a parameterized message.
@@ -135,8 +136,9 @@ public class ParameterizedMessage implements Message, StringBuilderFormattable {
     private void init(String messagePattern) {
         this.messagePattern = messagePattern;
         this.indices = new int[messagePattern == null ? 0 : messagePattern.length() << 1];
-        final int usedCount = ParameterFormatter.countArgumentPlaceholders2(messagePattern, indices);
+        int usedCount = ParameterFormatter.countArgumentPlaceholders2(messagePattern, indices);
         initThrowable(argArray, usedCount);
+        this.usedCount = Math.min(usedCount, (argArray == null) ? 0 : argArray.length);
     }
 
     private void initThrowable(final Object[] params, final int usedParams) {
@@ -210,11 +212,9 @@ public class ParameterizedMessage implements Message, StringBuilderFormattable {
             buffer.append(formattedMessage);
         } else {
             if (indices[0] < 0) {
-                ParameterFormatter.formatMessage(buffer, messagePattern, argArray,
-                        argArray == null ? 0 : argArray.length);
+                ParameterFormatter.formatMessage(buffer, messagePattern, argArray, usedCount);
             } else {
-                ParameterFormatter.formatMessage2(buffer, messagePattern, argArray,
-                        argArray == null ? 0 : argArray.length, indices);
+                ParameterFormatter.formatMessage2(buffer, messagePattern, argArray, usedCount, indices);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7ed09909/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
index bf7095c..b6a506f 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
@@ -57,9 +57,9 @@ public class ReusableParameterizedMessage implements ReusableMessage {
     private void init(final String messagePattern, final int argCount, final Object[] paramArray) {
         this.varargs = null;
         this.messagePattern = messagePattern;
-        this.argCount= argCount;
         int usedCount = count(messagePattern, indices);
-        initThrowable(paramArray, usedCount);
+        initThrowable(paramArray, argCount,usedCount);
+        this.argCount = Math.min(usedCount, argCount);
     }
 
     private static int count(final String messagePattern, final int[] indices) {
@@ -71,10 +71,9 @@ public class ReusableParameterizedMessage implements ReusableMessage {
         }
     }
 
-    private void initThrowable(final Object[] params, final int usedParams) {
+    private void initThrowable(final Object[] params, final int argCount, final int usedParams) {
         if (usedParams < argCount && this.throwable == null && params[argCount - 1] instanceof Throwable) {
             this.throwable = (Throwable) params[argCount - 1];
-            argCount--;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7ed09909/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableParameterizedMessageTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableParameterizedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableParameterizedMessageTest.java
index abd396e..0dd9260 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableParameterizedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableParameterizedMessageTest.java
@@ -30,10 +30,14 @@ public class ReusableParameterizedMessageTest {
     public void testNoArgs() {
         final String testMsg = "Test message {}";
         ReusableParameterizedMessage msg = new ReusableParameterizedMessage();
-        msg.set(testMsg, null);
+        msg.set(testMsg, (Object[]) null);
         String result = msg.getFormattedMessage();
         assertEquals(testMsg, result);
 
+        msg.set(testMsg, null);
+        result = msg.getFormattedMessage();
+        assertEquals(testMsg, result);
+
         msg.set(testMsg, null, null);
         result = msg.getFormattedMessage();
         assertEquals("Test message null", result);