From 02d023d7e53d15d4c346b70bc9a29113dc62d642 Mon Sep 17 00:00:00 2001 From: nickl- Date: Fri, 27 Oct 2017 06:59:33 +0200 Subject: Add sun.misc.Unsafe privileged retrieval to SecActions. Also do it anonomously so as not to raise the alarms and upset the powers to be. --- src/main/javassist/util/proxy/SecurityActions.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/main') diff --git a/src/main/javassist/util/proxy/SecurityActions.java b/src/main/javassist/util/proxy/SecurityActions.java index ca0de912..ce0b5fa6 100755 --- a/src/main/javassist/util/proxy/SecurityActions.java +++ b/src/main/javassist/util/proxy/SecurityActions.java @@ -162,4 +162,33 @@ class SecurityActions { } } } + + static Object getSunMiscUnsafeAnonymously() throws ClassNotFoundException + { + try { + return AccessController.doPrivileged( + new PrivilegedExceptionAction() { public Object run() throws + ClassNotFoundException, NoSuchFieldException, SecurityException, + IllegalArgumentException, IllegalAccessException { + Class unsafe = Class.forName("sun.misc.Unsafe"); + Field theUnsafe = unsafe.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + Object usf = theUnsafe.get(null); + theUnsafe.setAccessible(false); + return usf; + } + }); + } + catch (PrivilegedActionException e) { + if (e.getCause() instanceof ClassNotFoundException) + throw (ClassNotFoundException) e.getCause(); + if (e.getCause() instanceof NoSuchFieldException) + throw new ClassNotFoundException("No such instance.", e.getCause()); + if (e.getCause() instanceof IllegalAccessException + || e.getCause() instanceof IllegalAccessException + || e.getCause() instanceof SecurityException) + throw new ClassNotFoundException("Security denied access.", e.getCause()); + throw new RuntimeException(e.getCause()); + } + } } -- cgit v1.2.3