[Kaffe] bug found in Kaffe's classloader implementation

Moses DeJong dejong at cs.umn.edu
Fri Mar 19 15:07:39 PST 1999


I just ran the cvs code and it works now. Thanks.

Mo DeJong
dejong at cs.umn.edu

On Wed, 17 Mar 1999, Godmar Back wrote:

> 
>  Should be fixed now.
> 
> Thanks,
> 
> 	- Godmar
> 
> > 
> > Hello.
> > 
> > I have run into another problem with kaffe. This example code
> > shows how the classloader works in the JDK and that Kaffe
> > just calls exit(). I tried to implement a fix for this problem
> > in the file kaffe/kaffevm/readClass.c but the code does not
> > want to compile. Could someone with more knowledge of the kaffe
> > internals take a look at this problem and my partial fix?
> > 
> > 
> > 
> > public class ClassDefineBug {
> > 
> >     public static void main(String[] argv) throws Exception {
> > 
> > 	MyClassLoader mcl = new MyClassLoader();
> > 	
> > 	String data = "somestring";
> > 	
> > 	Class result = mcl.defineClass(null, data.getBytes());
> > 
> > 	System.out.println("result is " + result);
> >     }
> > }
> > 
> > class MyClassLoader extends ClassLoader {
> > 
> > Class defineClass(String className, byte[] classData) {
> >     Class result = null;
> >     try {
> > 	result = defineClass(null, classData, 0, classData.length);
> >     } catch (ClassFormatError e) {
> > 	System.out.println("ClassFormatError caught \"" + e.getMessage()
> > 			   + "\"");
> >     }
> >     return result;
> > }
> > 
> > 
> > protected Class loadClass(String className,boolean resolveIt)
> >     throws ClassNotFoundException, SecurityException
> > {
> >     return Class.forName(className);
> > }
> > 
> > }
> > 
> > 
> > 
> > 
> > 
> > 
> > JDK output
> > 
> > % java ClassDefineBug
> > ClassFormatError caught "Bad magic number"
> > result is null
> > 
> > 
> > 
> > Kaffe output
> > 
> > % kaffe ClassDefineBug
> > Bad magic 736f6d65 in class
> > 
> > 
> > 
> > 
> > 
> > Index: readClass.c
> > ===================================================================
> > RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/readClass.c,v
> > retrieving revision 1.5
> > diff -u -r1.5 readClass.c
> > --- readClass.c 1999/01/07 21:03:19     1.5
> > +++ readClass.c 1999/03/18 03:13:31
> > @@ -19,6 +19,7 @@
> >  #include "file.h"
> >  #include "access.h"
> >  #include "object.h"
> > +#include "errors.h"
> >  #include "constants.h"
> >  #ifdef KAFFEH
> >  #include <readClassConfig.h>
> > @@ -41,8 +42,13 @@
> >         /* Read in class info */
> >         readu4(&magic, fp);
> >         if (magic != JAVAMAGIC) {
> > +               /*
> >                 fprintf(stderr, "Bad magic %x in class\n", magic);
> >                 EXIT(1);
> > +                */
> > +                SET_LANG_EXCEPTION_MESSAGE(einfo,
> > +                       ClassFormatError, "Bad magic number");
> > +               return (0);
> >         }
> >         readu2(&minor_version, fp);
> >         readu2(&major_version, fp);
> > 
> > 
> > 
> > 
> > thanks
> > 
> > Mo DeJong
> > dejong at cs.umn.edu
> > 
> > 
> 
> 



More information about the kaffe mailing list