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/08/20 02:04:37 UTC

[3/8] logging-log4j2 git commit: LOG4J2-1527 Prevent NPE in RingBufferLogEvent.getFormattedMessage() when used in web applications.

LOG4J2-1527 Prevent NPE in RingBufferLogEvent.getFormattedMessage() when used in web applications.

This closes #39 (https://github.com/apache/logging-log4j2/pull/39 )


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

Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 147f78c45e181d78778a710d24510c9b03d97bc7
Parents: 6a23301
Author: rpopma <rp...@apache.org>
Authored: Sat Aug 20 09:44:20 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Aug 20 09:44:20 2016 +0900

----------------------------------------------------------------------
 .../log4j/core/async/RingBufferLogEvent.java      |  4 +++-
 .../log4j/core/async/RingBufferLogEventTest.java  | 18 ++++++++++++++----
 src/changes/changes.xml                           |  4 ++++
 3 files changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/147f78c4/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
index c4de9d4..76b00a1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
@@ -210,7 +210,9 @@ public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequen
      */
     @Override
     public String getFormattedMessage() {
-        return messageText.toString();
+        return messageText != null // LOG4J2-1527: may be null in web apps
+                ? messageText.toString() // note: please keep below "redundant" braces for readability
+                : (message == null ? null : message.getFormattedMessage());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/147f78c4/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
index ec3a874..5c7f467 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
@@ -121,11 +121,11 @@ public class RingBufferLogEventTest {
         final long nanoTime = 1;
         evt.setValues(null, loggerName, marker, fqcn, level, data, t, map,
                 contextStack, -1, threadName, -1, location, currentTimeMillis, nanoTime);
-        
+
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         final ObjectOutputStream out = new ObjectOutputStream(baos);
         out.writeObject(evt);
-        
+
         final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
         final RingBufferLogEvent other = (RingBufferLogEvent) in.readObject();
         assertEquals(loggerName, other.getLoggerName());
@@ -141,7 +141,7 @@ public class RingBufferLogEventTest {
         assertEquals(location, other.getSource());
         assertEquals(currentTimeMillis, other.getTimeMillis());
     }
-    
+
     @Test
     public void testCreateMementoReturnsCopy() {
         final RingBufferLogEvent evt = new RingBufferLogEvent();
@@ -160,7 +160,7 @@ public class RingBufferLogEventTest {
         final long nanoTime = 1;
         evt.setValues(null, loggerName, marker, fqcn, level, data, t, map,
                 contextStack, -1, threadName, -1, location, currentTimeMillis, nanoTime);
-        
+
         final LogEvent actual = evt.createMemento();
         assertEquals(evt.getLoggerName(), actual.getLoggerName());
         assertEquals(evt.getMarker(), actual.getMarker());
@@ -175,4 +175,14 @@ public class RingBufferLogEventTest {
         assertEquals(evt.getSource(), actual.getSource());
         assertEquals(evt.getThrownProxy(), actual.getThrownProxy());
     }
+
+    @Test
+    public void testMessageTextNeverThrowsNpe() {
+        final RingBufferLogEvent evt = new RingBufferLogEvent();
+        try {
+            evt.getFormattedMessage();
+        } catch (NullPointerException e) {
+            fail("the messageText field was not set");
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/147f78c4/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index be283c7..1ea373c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,10 @@
   </properties>
   <body>
     <release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+
+      <action issue="LOG4J2-1527" dev="rpopma" type="fix" due-to="Jose Leon">
+        Prevent NPE in RingBufferLogEvent.getFormattedMessage() when used in web applications.
+      </action>
       <action issue="LOG4J2-905" dev="ggregory" type="fix" due-to="Gary Gregory, Moritz L�ser">
         Ability to disable (date) lookup completely, compatibility issues with other libraries like Camel.
       </action>