Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release-src > by-pkgid > 2dbe735731c574cdabda24e45f7258a3 > files > 2

reflectasm-1.07-6.mga5.src.rpm

diff -Nru reflectasm-1.07/src/com/esotericsoftware/reflectasm/AccessClassLoader.java reflectasm-1.07-trunk/src/com/esotericsoftware/reflectasm/AccessClassLoader.java
--- reflectasm-1.07/src/com/esotericsoftware/reflectasm/AccessClassLoader.java	2013-07-03 22:39:00.000000000 +0200
+++ reflectasm-1.07-trunk/src/com/esotericsoftware/reflectasm/AccessClassLoader.java	2013-10-09 12:25:47.000000000 +0200
@@ -2,6 +2,7 @@
 package com.esotericsoftware.reflectasm;
 
 import java.lang.reflect.Method;
+import java.security.ProtectionDomain;
 import java.util.ArrayList;
 
 class AccessClassLoader extends ClassLoader {
@@ -14,12 +15,22 @@
 				AccessClassLoader accessClassLoader = accessClassLoaders.get(i);
 				if (accessClassLoader.getParent() == parent) return accessClassLoader;
 			}
+			if(parent == null) parent = ClassLoader.getSystemClassLoader();
 			AccessClassLoader accessClassLoader = new AccessClassLoader(parent);
 			accessClassLoaders.add(accessClassLoader);
 			return accessClassLoader;
 		}
 	}
 
+	static void remove (ClassLoader parent) {
+		synchronized (accessClassLoaders) {
+			for (int i = accessClassLoaders.size() - 1; i >= 0; i--) {
+				AccessClassLoader accessClassLoader = accessClassLoaders.get(i);
+				if (accessClassLoader.getParent() == parent) accessClassLoaders.remove(i);
+			}
+		}
+	}
+
 	private AccessClassLoader (ClassLoader parent) {
 		super(parent);
 	}
@@ -37,11 +48,12 @@
 		try {
 			// Attempt to load the access class in the same loader, which makes protected and default access members accessible.
 			Method method = ClassLoader.class.getDeclaredMethod("defineClass", new Class[] {String.class, byte[].class, int.class,
-				int.class});
+				int.class, ProtectionDomain.class});
 			method.setAccessible(true);
-			return (Class)method.invoke(getParent(), new Object[] {name, bytes, Integer.valueOf(0), Integer.valueOf(bytes.length)});
+			return (Class)method.invoke(getParent(), new Object[] {name, bytes, Integer.valueOf(0), Integer.valueOf(bytes.length),
+				getClass().getProtectionDomain()});
 		} catch (Exception ignored) {
 		}
-		return defineClass(name, bytes, 0, bytes.length);
+		return defineClass(name, bytes, 0, bytes.length, getClass().getProtectionDomain());
 	}
 }