* src/native/vm/VMClass.c (Java_java_lang_VMClass_getSuperclass): We must not
authoredwin <none@none>
Mon, 13 Mar 2006 07:06:46 +0000 (07:06 +0000)
committeredwin <none@none>
Mon, 13 Mar 2006 07:06:46 +0000 (07:06 +0000)
assume that the class is already linked, so we have to resolve the super class
reference. This fixes a NPE bug with Jonas.

src/native/vm/VMClass.c

index a7570675170ae9d891de57fd22c7c1c53212892a..eadb295ffef17558f071063d6941e46e84573b61 100644 (file)
@@ -30,7 +30,7 @@
             Christian Thalinger
                        Edwin Steiner
 
-   $Id: VMClass.c 4551 2006-03-03 00:00:39Z twisti $
+   $Id: VMClass.c 4588 2006-03-13 07:06:46Z edwin $
 
 */
 
@@ -613,13 +613,26 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *
        classinfo *sc;
 
        c = (classinfo *) klass;
-       sc = c->super.cls;
 
+       /* for java.lang.Object, primitive and Void classes we return NULL */
+       if (!c->super.any)
+               return NULL;
+
+       /* for interfaces we also return NULL */
        if (c->flags & ACC_INTERFACE)
                return NULL;
 
-       if (!sc)
+       /* we may have to resolve the super class reference */
+       if (!resolve_classref_or_classinfo(NULL, c->super, resolveEager, 
+                                                                          true, /* check access */
+                                                                          false,  /* don't link */
+                                                                          &sc))
+       {
                return NULL;
+       }
+
+       /* store the resolution */
+       c->super.cls = sc;
 
        return (java_lang_Class *) sc;
 }