diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMapTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMapTest.java index 5957a931bf3..3f43e3e2c4d 100644 --- a/log4j-api-test/src/test/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMapTest.java +++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMapTest.java @@ -55,18 +55,19 @@ private HashMap getTestParameters(int numParams) { @Test public void testCopyAndPut() { UnmodifiableArrayBackedMap testMap = UnmodifiableArrayBackedMap.EMPTY_MAP; - testMap = testMap.copyAndPut("1", "value1"); - assertTrue(testMap.containsKey("1")); - assertEquals(testMap.get("1"), "value1"); + testMap = testMap.copyAndPut("6", "value6"); + assertTrue(testMap.containsKey("6")); + assertEquals(testMap.get("6"), "value6"); - testMap = testMap.copyAndPut("1", "another value"); - assertTrue(testMap.containsKey("1")); - assertEquals(testMap.get("1"), "another value"); + testMap = testMap.copyAndPut("6", "another value"); + assertTrue(testMap.containsKey("6")); + assertEquals(testMap.get("6"), "another value"); HashMap newValues = getTestParameters(); testMap = testMap.copyAndPutAll(newValues); assertEquals(testMap.get("1"), "value1"); assertEquals(testMap.get("4"), "value4"); + assertEquals(testMap.get("6"), "another value"); } @Test diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMap.java index cab4dc2eb71..eada687424f 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMap.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/internal/map/UnmodifiableArrayBackedMap.java @@ -282,6 +282,7 @@ public UnmodifiableArrayBackedMap copyAndPutAll(Map entriesToAdd // copy the contents of the current map (if any) if (numEntries > 0) { System.arraycopy(backingArray, 0, newMap.backingArray, 0, numEntries * 2 + 1); + newMap.numEntries = numEntries; } for (Map.Entry entry : entriesToAdd.entrySet()) { diff --git a/src/changelog/.2.x.x/2942_fix_ThreadContext_putAll.xml b/src/changelog/.2.x.x/2942_fix_ThreadContext_putAll.xml new file mode 100644 index 00000000000..c6dd4838dea --- /dev/null +++ b/src/changelog/.2.x.x/2942_fix_ThreadContext_putAll.xml @@ -0,0 +1,8 @@ + + + + Fix `putAll()` in the default thread context map implementation +