Repository: logging-log4j2
Updated Branches:
  refs/heads/master 59925f963 -> 9acc19ca2


[LOG4J2-2377] NullPointerException in
org.apache.logging.log4j.util.LoaderUtil.getClassLoaders() when using
Bootstrap classloader.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9acc19ca
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9acc19ca
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9acc19ca

Branch: refs/heads/master
Commit: 9acc19ca26770a75f844b260e0d41cdb5c0c362b
Parents: 59925f9
Author: Gary Gregory <[email protected]>
Authored: Thu Jul 19 07:42:59 2018 -0600
Committer: Gary Gregory <[email protected]>
Committed: Thu Jul 19 07:42:59 2018 -0600

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/util/LoaderUtil.java    | 10 ++++++----
 .../java/org/apache/logging/log4j/util/ProviderUtil.java  |  8 ++++++--
 src/changes/changes.xml                                   |  3 +++
 3 files changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9acc19ca/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index 3923c7c..021dcde 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -113,21 +113,23 @@ public final class LoaderUtil {
         ClassLoader tcl = getThreadContextClassLoader();
         classLoaders.add(tcl);
         if (!isForceTccl()) {
+            // Some implementations may use null to represent the bootstrap 
class loader.
             ClassLoader current = LoaderUtil.class.getClassLoader();
-            if (current != tcl) {
+            if (current != null && current != tcl) {
                 classLoaders.add(current);
                 ClassLoader parent = current.getParent();
                 while (parent != null && !classLoaders.contains(parent)) {
                     classLoaders.add(parent);
                 }
             }
-            ClassLoader parent = tcl.getParent();
+            ClassLoader parent = tcl == null ? null : tcl.getParent();
             while (parent != null && !classLoaders.contains(parent)) {
                 classLoaders.add(parent);
                 parent = parent.getParent();
             }
-            if (!classLoaders.contains(ClassLoader.getSystemClassLoader())) {
-                classLoaders.add(ClassLoader.getSystemClassLoader());
+            ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
+            if (!classLoaders.contains(systemClassLoader)) {
+                classLoaders.add(systemClassLoader);
             }
         }
         return classLoaders.toArray(new ClassLoader[classLoaders.size()]);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9acc19ca/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
index 200a6f3..9645a71 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
@@ -100,8 +100,12 @@ public final class ProviderUtil {
         }
     }
 
-    protected static void loadProviders(final ClassLoader cl) {
-        final ServiceLoader<Provider> serviceLoader = 
ServiceLoader.load(Provider.class, cl);
+    /**
+     * 
+     * @param classLoader null can be used to mark the bootstrap class loader.
+     */
+    protected static void loadProviders(final ClassLoader classLoader) {
+        final ServiceLoader<Provider> serviceLoader = 
ServiceLoader.load(Provider.class, classLoader);
         for (final Provider provider : serviceLoader) {
             if (validVersion(provider.getVersions()) && 
!PROVIDERS.contains(provider)) {
                 PROVIDERS.add(provider);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9acc19ca/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0fa496d..6b58e77 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -338,6 +338,9 @@
         StringBuilders.escapeXml implementation runs in linear time. Escaping 
large XML strings
         in EncodingPatternConverter and MapMessage will perform significantly 
better.
       </action>
+      <action issue="LOG4J2-2377" dev="ggregory" type="fix" due-to="Mirko 
Rzehak, Gary Gregory">
+        NullPointerException in 
org.apache.logging.log4j.util.LoaderUtil.getClassLoaders() when using Bootstrap 
class loader.
+      </action>
     </release>
     <release version="2.11.0" date="2018-xx-xx" description="GA Release 
2.11.0">
       <action issue="LOG4J2-2104" dev="rgoers" type="fix">

Reply via email to