[LOG4J2-799] Log4j 2 throws ArrayIndexOutOfBoundsException. The private method ThrowableProxy.formatEntry(StackTraceElement, ExtendedStackTraceElement, StringBuilder) is now formatEntry(ExtendedStackTraceElement, StringBuilder) because the StackTraceElement was not used. Also, it is possible that calling this method could cause an NPE while a call site tried to address a null StackTraceElement from ThrowableProxy.getExtendedStackTrace(ThrowableProxy.java:232). This is what seems to happen in the stack strace for [LOG4J2-799] which matches up with 2.0-rc1.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a4aab92d Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a4aab92d Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a4aab92d Branch: refs/heads/messaging-module Commit: a4aab92d9fc64eccfbcff8c69e4759976d57078d Parents: 443779a Author: Gary Gregory <[email protected]> Authored: Fri Aug 29 09:48:08 2014 -0400 Committer: Gary Gregory <[email protected]> Committed: Fri Aug 29 09:48:08 2014 -0400 ---------------------------------------------------------------------- .../org/apache/logging/log4j/core/impl/ThrowableProxy.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a4aab92d/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java index e08205d..2320ad7 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java @@ -224,7 +224,7 @@ public class ThrowableProxy implements Serializable { final ExtendedStackTraceElement[] extStackTrace, final List<String> ignorePackages) { if (ignorePackages == null || ignorePackages.isEmpty()) { for (int i = 0; i < extStackTrace.length; ++i) { - this.formatEntry(causedTrace[i], extStackTrace[i], sb); + this.formatEntry(extStackTrace[i], sb); } } else { int count = 0; @@ -238,7 +238,7 @@ public class ThrowableProxy implements Serializable { } count = 0; } - this.formatEntry(causedTrace[i], extStackTrace[i], sb); + this.formatEntry(extStackTrace[i], sb); } else { ++count; } @@ -256,8 +256,7 @@ public class ThrowableProxy implements Serializable { } } - private void formatEntry(final StackTraceElement element, final ExtendedStackTraceElement extStackTraceElement, - final StringBuilder sb) { + private void formatEntry(final ExtendedStackTraceElement extStackTraceElement, final StringBuilder sb) { sb.append("\tat "); sb.append(extStackTraceElement); sb.append('\n');
