From 8f5910802bdabd137cd67ad198ab91cc8886e46a Mon Sep 17 00:00:00 2001 From: Dmitry Cherniachenko Date: Fri, 21 Apr 2017 21:35:03 +0200 Subject: [PATCH] Use bootstrap classloader to only provide access to JRE classes --- .../java/decompiler/modules/decompiler/ClasspathHelper.java | 3 ++- .../decompiler/modules/decompiler/exps/InvocationExprent.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java index b8ceb06123b1..83ad1216a9bd 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java @@ -30,7 +30,8 @@ public class ClasspathHelper { private static Method findMethodOnClasspath(String targetClass, String methodSignature) { try { - Class cls = Class.forName(targetClass); + // use bootstrap classloader to only provide access to JRE classes + Class cls = new ClassLoader(null) {}.loadClass(targetClass); for (Method mtd : cls.getMethods()) { // use contains() to ignore access modifiers and thrown exceptions if (mtd.toString().contains(methodSignature)) { diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java index 5f3c197939ab..8d53711cbccc 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java @@ -394,6 +394,8 @@ public class InvocationExprent extends Exprent { } } else { + // TODO: tap into IDEA indices to access libraries methods details + // try to check the class on the classpath Method mtd = ClasspathHelper.findMethod(classname, name, descriptor); return mtd != null && mtd.isVarArgs();