You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ck...@apache.org on 2020/10/06 14:41:58 UTC
[logging-log4j2] 01/02: LOG4J2-2939: Fix NPE in MDCContextMap (#430)
This is an automated email from the ASF dual-hosted git repository.
ckozak pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit ec34bd2f1ebc34bc80cde64d51ec6060d7bd250e
Author: Constantin Hirsch (SemVox) <63...@users.noreply.github.com>
AuthorDate: Tue Oct 6 16:34:38 2020 +0200
LOG4J2-2939: Fix NPE in MDCContextMap (#430)
Accomodate for the fact that MDC.getCopyOfContextMap() may return null
---
.../org/apache/logging/slf4j/MDCContextMap.java | 6 ++--
.../java/org/apache/logging/slf4j/LoggerTest.java | 41 +++++++++++++++++++++-
2 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
index f03ee54..b04d358 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
@@ -71,7 +71,8 @@ public class MDCContextMap implements CleanableThreadContextMap {
@Override
public boolean containsKey(final String key) {
- return MDC.getCopyOfContextMap().containsKey(key);
+ Map<String, String> map = MDC.getCopyOfContextMap();
+ return map != null && map.containsKey(key);
}
@Override
@@ -88,7 +89,8 @@ public class MDCContextMap implements CleanableThreadContextMap {
@Override
public boolean isEmpty() {
- return MDC.getCopyOfContextMap().isEmpty();
+ Map<String, String> map = MDC.getCopyOfContextMap();
+ return map == null || map.isEmpty();
}
@Override
diff --git a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
index 77b9c4e..1f14110 100644
--- a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
+++ b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
@@ -33,6 +33,7 @@ import org.apache.logging.log4j.spi.MessageFactory2Adapter;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
+import org.slf4j.MDC;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
@@ -183,5 +184,43 @@ public class LoggerTest {
assertThat(list.strList, hasSize(2));
assertTrue("Incorrect year", list.strList.get(0).startsWith("2010"));
}
-}
+ @Test
+ public void mdcNullBackedIsEmpty() {
+ assertNull("Setup wrong", MDC.getCopyOfContextMap());
+ assertTrue(ThreadContext.isEmpty());
+ }
+
+ @Test
+ public void mdcNullBackedContainsKey() {
+ assertNull("Setup wrong", MDC.getCopyOfContextMap());
+ assertFalse(ThreadContext.containsKey("something"));
+ }
+
+ @Test
+ public void mdcNullBackedContainsNullKey() {
+ assertNull("Setup wrong", MDC.getCopyOfContextMap());
+ assertFalse(ThreadContext.containsKey(null));
+ }
+
+ @Test
+ public void mdcContainsNullKey() {
+ try {
+ ThreadContext.put("some", "thing");
+ assertNotNull("Setup wrong", MDC.getCopyOfContextMap());
+ assertFalse(ThreadContext.containsKey(null));
+ } finally {
+ ThreadContext.clearMap();
+ }
+ }
+
+ @Test
+ public void mdcCannotContainNullKey() {
+ try {
+ ThreadContext.put(null, "something");
+ fail("should throw");
+ } catch (IllegalArgumentException | NullPointerException e) {
+ // expected
+ }
+ }
+}