Hi, When ClassLoader.defineClass() gets a null ProtectionDomain is should use the default protection domain. This just moves the clutch from the other defineClass() method (that doesn't take a protection domain) into the one that takes an explicit ProtectionDomain:
2004-11-13 Mark Wielaard <[EMAIL PROTECTED]>
* libraries/javalib/java/lang/ClassLoader.java
(defineClass(String,byte[],int,int)): Move
defaultProtectionDomain initialization to...
(defineClass(String,byte[],int,int,ProtectionDomain)): ...here.
Some of the Eclipse class loaders call defineClass() with a null
ProtectionDomain apparently and you can not store those in a HashTable.
Again, switching to the GNU Classpath ClassLoader implementation might
be a good idea.
Cheers,
Mark
Index: libraries/javalib/java/lang/ClassLoader.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/lang/ClassLoader.java,v
retrieving revision 1.32
diff -u -r1.32 ClassLoader.java
--- libraries/javalib/java/lang/ClassLoader.java 22 Mar 2004 11:24:46 -0000 1.32
+++ libraries/javalib/java/lang/ClassLoader.java 14 Nov 2004 11:52:24 -0000
@@ -165,11 +165,7 @@
protected final Class defineClass(String name, byte data[], int off, int len)
throws ClassFormatError {
- if (defaultProtectionDomain == null) {
- // XXX FIXME..
- defaultProtectionDomain = new ProtectionDomain(null, null);
- }
- return defineClass(name, data, off, len, defaultProtectionDomain);
+ return defineClass(name, data, off, len, null);
}
protected final Class defineClass(String name, byte data[], int off,
@@ -177,13 +173,21 @@
if (off < 0 || len < 0 || off + len > data.length) {
throw new IndexOutOfBoundsException();
}
- Class clazz = defineClass0(name, data, off, len);
+ Class clazz = null;
+ clazz = defineClass0(name, data, off, len);
if (name != null) {
loadedClasses.put(name, clazz);
}
else {
loadedClasses.put(clazz.getName(), clazz);
}
+ if (pd == null) {
+ if (defaultProtectionDomain == null) {
+ // XXX FIXME..
+ defaultProtectionDomain = new ProtectionDomain(null, null);
+ }
+ pd = defaultProtectionDomain;
+ }
protectionDomains.put(clazz, pd);
return (clazz);
}
protected final Class findLoadedClass(String name) {
signature.asc
Description: This is a digitally signed message part
_______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe
