From 0b7575a97efac445f1a1a645942f364c9b93aef2 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Sat, 4 Jul 2020 16:32:23 +0300 Subject: [PATCH] fix: avoid NPE when initializing SingleCertValidatingFactory with classpath resource and contextclassloader is null --- .../ssl/SingleCertValidatingFactory.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/pgjdbc/src/main/java/org/postgresql/ssl/SingleCertValidatingFactory.java b/pgjdbc/src/main/java/org/postgresql/ssl/SingleCertValidatingFactory.java index f643d410a3..49a57a5c08 100644 --- a/pgjdbc/src/main/java/org/postgresql/ssl/SingleCertValidatingFactory.java +++ b/pgjdbc/src/main/java/org/postgresql/ssl/SingleCertValidatingFactory.java @@ -97,8 +97,26 @@ public SingleCertValidatingFactory(String sslFactoryArg) throws GeneralSecurityE in = new BufferedInputStream(new FileInputStream(path)); } else if (sslFactoryArg.startsWith(CLASSPATH_PREFIX)) { String path = sslFactoryArg.substring(CLASSPATH_PREFIX.length()); - in = new BufferedInputStream( - Thread.currentThread().getContextClassLoader().getResourceAsStream(path)); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + InputStream inputStream; + if (classLoader != null) { + inputStream = classLoader.getResourceAsStream(path); + if (inputStream == null) { + throw new IllegalArgumentException( + GT.tr("Unable to find resource {0} via Thread contextClassLoader {1}", + path, classLoader) + ); + } + } else { + inputStream = getClass().getResourceAsStream(path); + if (inputStream == null) { + throw new IllegalArgumentException( + GT.tr("Unable to find resource {0} via class {1} ClassLoader {2}", + path, getClass(), getClass().getClassLoader()) + ); + } + } + in = new BufferedInputStream(inputStream); } else if (sslFactoryArg.startsWith(ENV_PREFIX)) { String name = sslFactoryArg.substring(ENV_PREFIX.length()); String cert = System.getenv(name);