From 8cceb3160afe47ce2781e93cd46bf96eaf5f81cf Mon Sep 17 00:00:00 2001 From: Thiago Kronig Date: Sat, 29 Nov 2014 01:07:20 -0200 Subject: [PATCH] [LOG4J2-834] Ignores NoClassDefFoundError and other Throwables in ThrowableProxy.loadClass --- .../logging/log4j/core/impl/ThrowableProxy.java | 4 ++-- .../logging/log4j/core/impl/ThrowableProxyTest.java | 20 ++++++++++++++++++++ .../log4j/core/impl/ForceNoDefClassFoundError.class | Bin 0 -> 1025 bytes 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 log4j-core/src/test/resources/org/apache/logging/log4j/core/impl/ForceNoDefClassFoundError.class 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 75c8564..540b3ad 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 @@ -450,10 +450,10 @@ public class ThrowableProxy implements Serializable { } try { clazz = Loader.loadClass(className); - } catch (final ClassNotFoundException ignored) { + } catch (final Throwable ignored) { try { clazz = Loader.initializeClass(className, this.getClass().getClassLoader()); - } catch (final ClassNotFoundException ignore) { + } catch (final Throwable ignore) { return null; } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java index 3956c62..11b7091 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java @@ -168,4 +168,24 @@ public class ThrowableProxyTest { throwable.getStackTrace()); assertNotNull("No package data returned", callerPackageData); } + + /** + * Asserts that LOG4J2-834 is solved by constructing a ThrowableProxy over a RuntimeException object thrown at a + * unloaded known class (already compiled and available as a test resource: + * org.apache.logging.log4j.core.impl.ForceNoDefClassFoundError.class). + */ + @Test + public void testStackWithUnloadableClass() throws Exception{ + final Stack> stack = new Stack>(); + final Map map = new HashMap(); + + final String runtimeExceptionThrownAtUnloadableClass_base64 = "rO0ABXNyABpqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbp5fBkcKNIPlAgAAeHIAE2phdmEubGFuZy5FeGNlcHRpb27Q/R8+GjscxAIAAHhyABNqYXZhLmxhbmcuVGhyb3dhYmxl1cY1Jzl3uMsDAANMAAVjYXVzZXQAFUxqYXZhL2xhbmcvVGhyb3dhYmxlO0wADWRldGFpbE1lc3NhZ2V0ABJMamF2YS9sYW5nL1N0cmluZztbAApzdGFja1RyYWNldAAeW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7eHBxAH4ABnB1cgAeW0xqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnQ7AkYqPDz9IjkCAAB4cAAAAAFzcgAbamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50YQnFmiY23YUCAARJAApsaW5lTnVtYmVyTAAOZGVjbGFyaW5nQ2xhc3NxAH4ABEwACGZpbGVOYW1lcQB+AARMAAptZXRob2ROYW1lcQB+AAR4cAAAAAZ0ADxvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkZvcmNlTm9EZWZDbGFzc0ZvdW5kRXJyb3J0AB5Gb3JjZU5vRGVmQ2xhc3NGb3VuZEVycm9yLmphdmF0AARtYWlueA=="; + final byte[] binaryDecoded = DatatypeConverter.parseBase64Binary(runtimeExceptionThrownAtUnloadableClass_base64); + final ByteArrayInputStream inArr = new ByteArrayInputStream(binaryDecoded); + final ObjectInputStream in = new ObjectInputStream(inArr); + final Throwable throwable = (Throwable) in.readObject(); + final ThrowableProxy subject = new ThrowableProxy(throwable); + + subject.toExtendedStackTrace(stack, map, null, throwable.getStackTrace()); + } } diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/impl/ForceNoDefClassFoundError.class b/log4j-core/src/test/resources/org/apache/logging/log4j/core/impl/ForceNoDefClassFoundError.class new file mode 100644 index 0000000000000000000000000000000000000000..f91bae9b74eed52dcb5a5031ea225633f4d6794f GIT binary patch literal 1025 zcma)5TTc@~6#k|yY`ZN2a#2ujURx-vBH{%!pL`;GM?GeQe#Yfm~+mYIp;gq`T6VHcL4KvVWSsg7RGJF44<$tX`{=CQ#LHzGURp& zcW~FJ@7cJItc@I|EzDTRTbQ*l$I!hjeW_nE#Iw0~42jj?Krr-fNnh;LDkY)b@{&iI zM1@PAVK}?Lb;OUk<8i<26t$9mdC55T6g780Z1XU(r+gUf^|~uUEd#$wmts&;uGo+U zY