From a7debba54b93688c9aecca5069f9a1aa4aeb8555 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:57:24 +0200 Subject: [PATCH] [BUGFIX] Added getProtectionDomain to ClassRedirect --- .../core/asm/redirect/ClassRedirect.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java index 4e0be58..6f252dc 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -8,9 +8,25 @@ import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; public class ClassRedirect { + public static ProtectionDomain getProtectionDomain(final Class clazz) { + if (validStack()) { + return AccessController.doPrivileged(new PrivilegedAction() { + public ProtectionDomain run() { + return clazz.getProtectionDomain(); + } + }); + } + + System.err.println(clazz.getName() + " getProtectionDomain request Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + public static Object newInstance(Class c) throws IllegalAccessException, InstantiationException { if (validStack()) { return c.newInstance(); @@ -136,8 +152,9 @@ public class ClassRedirect { private static boolean validStack() { Exception e = new Exception(); for (StackTraceElement elem : e.getStackTrace()) { - if (elem.getClassName().equals(Script.class.getName())) + if (elem.getClassName().equals(Script.class.getName())) { return true; + } } return false; }