From 5de2e5b11bea3d8643a65d7499fca1fe15ac31f2 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/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java b/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java index b8ceb06..83ad121 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java +++ b/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/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java index 5f3c197..8d53711 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java +++ b/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();