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">
