Skip to content

Commit afcb309

Browse files
authored
Merge pull request #1585 from istudens/securitymanager_issue
invoke ServiceLoader.load() inside of a privileged block
2 parents 32001a6 + 6ff0838 commit afcb309

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java

+18-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.*;
44
import java.lang.reflect.Type;
55
import java.net.URL;
6+
import java.security.AccessController;
7+
import java.security.PrivilegedAction;
68
import java.text.DateFormat;
79
import java.util.*;
810
import java.util.concurrent.ConcurrentHashMap;
@@ -967,14 +969,28 @@ public static List<Module> findModules() {
967969
public static List<Module> findModules(ClassLoader classLoader)
968970
{
969971
ArrayList<Module> modules = new ArrayList<Module>();
970-
ServiceLoader<Module> loader = (classLoader == null) ?
971-
ServiceLoader.load(Module.class) : ServiceLoader.load(Module.class, classLoader);
972+
ServiceLoader<Module> loader = secureGetServiceLoader(Module.class, classLoader);
972973
for (Module module : loader) {
973974
modules.add(module);
974975
}
975976
return modules;
976977
}
977978

979+
private static <T> ServiceLoader<T> secureGetServiceLoader(final Class<T> clazz, final ClassLoader classLoader) {
980+
final SecurityManager sm = System.getSecurityManager();
981+
if (sm == null) {
982+
return (classLoader == null) ?
983+
ServiceLoader.load(clazz) : ServiceLoader.load(clazz, classLoader);
984+
}
985+
return AccessController.doPrivileged(new PrivilegedAction<ServiceLoader<T>>() {
986+
@Override
987+
public ServiceLoader<T> run() {
988+
return (classLoader == null) ?
989+
ServiceLoader.load(clazz) : ServiceLoader.load(clazz, classLoader);
990+
}
991+
});
992+
}
993+
978994
/**
979995
* Convenience method that is functionally equivalent to:
980996
*<code>

0 commit comments

Comments
 (0)