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/13 15:10:28 UTC
logging-log4j2 git commit: LOG4J2-1447 bugfix in remove: off-by-one
error and should null out the removed slot.
Repository: logging-log4j2
Updated Branches:
refs/heads/master a9069ad03 -> 6d90ac76f
LOG4J2-1447 bugfix in remove: off-by-one error and should null out the removed slot.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6d90ac76
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6d90ac76
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6d90ac76
Branch: refs/heads/master
Commit: 6d90ac76fbd26910a5a9c6a5d1a7b1450704c759
Parents: a9069ad
Author: rpopma <rp...@apache.org>
Authored: Wed Sep 14 00:10:32 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Wed Sep 14 00:10:32 2016 +0900
----------------------------------------------------------------------
.../logging/log4j/util/ArrayContextData.java | 6 ++--
.../log4j/util/ArrayContextDataTest.java | 32 ++++++++++++++++++++
2 files changed, 36 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d90ac76/log4j-api/src/main/java/org/apache/logging/log4j/util/ArrayContextData.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/ArrayContextData.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/ArrayContextData.java
index 9864a99..6dc5672 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ArrayContextData.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ArrayContextData.java
@@ -282,8 +282,10 @@ public class ArrayContextData implements MutableContextData {
assertNotFrozen();
assertNoConcurrentModification();
- System.arraycopy(keys, index + 1, keys, index, size - index);
- System.arraycopy(values, index + 1, values, index, size - index);
+ System.arraycopy(keys, index + 1, keys, index, size - 1 - index);
+ System.arraycopy(values, index + 1, values, index, size - 1 - index);
+ keys[size - 1] = null;
+ values[size - 1] = null;
size--;
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d90ac76/log4j-api/src/test/java/org/apache/logging/log4j/util/ArrayContextDataTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/ArrayContextDataTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/ArrayContextDataTest.java
index db9cfc2..adbabb8 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/ArrayContextDataTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/ArrayContextDataTest.java
@@ -488,6 +488,38 @@ public class ArrayContextDataTest {
}
@Test
+ public void testRemoveNullsOutRemovedSlot() throws Exception {
+ final ArrayContextData original = new ArrayContextData();
+ original.putValue("a", "avalue");
+ original.putValue("b", "bvalue");
+ original.putValue("c", "cvalue");
+ original.putValue("d", "dvalue");
+ original.remove("a");
+ original.remove("b");
+ original.remove("c");
+ original.remove("d");
+ assertNull(original.getValueAt(0));
+
+ // ensure slots in the values array are nulled out
+ Field f = ArrayContextData.class.getDeclaredField("values");
+ f.setAccessible(true);
+ Object[] values = (Object[]) f.get(original);
+ for (int i = 0; i < values.length; i++) {
+ assertNull(values[i]);
+ }
+ }
+
+ @Test
+ public void testRemoveWhenFull() throws Exception {
+ final ArrayContextData original = new ArrayContextData();
+ original.putValue("a", "avalue");
+ original.putValue("b", "bvalue");
+ original.putValue("c", "cvalue");
+ original.putValue("d", "dvalue"); // default capacity = 4
+ original.remove("d");
+ }
+
+ @Test
public void testNullValuesArePreserved() {
final ArrayContextData original = new ArrayContextData();
original.putValue("a", "avalue");