This is the mail archive of the kawa@sourceware.cygnus.com mailing list for the Kawa project. See the Kawa home page for more information.


[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index] [Subject Index] [Author Index] [Thread Index]

ClassType writeToFile problem




I wrote a very simple program to test out the class loader/saver:


********** TestDump.java *********

import java.lang.*;
import gnu.bytecode.*;
import java.io.*;

public class TestDump {

  public static void main(String[] args)  {
    FileInputStream sourceFileInputStream;
    try {
      sourceFileInputStream = new FileInputStream(args[0]);
      ClassType ct = ClassFileInput.readClassType(sourceFileInputStream);
      ct.writeToFile(args[0] + ".copy");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
***************** End of TestDump.java **********

Compiled this and ran it with one of my classfiles. Got an error:

java.lang.NullPointerException
        at gnu.bytecode.ClassType.doFixups(ClassType.java:273)
        at gnu.bytecode.ClassType.writeToStream(ClassType.java:284)
        at gnu.bytecode.ClassType.writeToFile(ClassType.java:324)
        at TestDump.main(TestDump.java:12)


A little digging around showed that the code snippet (lines 270--273)
in gnu.bytecode.ClassType.java don't check for (code == null). So I
added a check shown below and I was able to use the copy in place of
the real class file with no problems. Can someone explain if this is a
bug? 

Thanks.


for (Method method = methods; method != null && method.code!=null; method = method.next) {                                      ^^^^^^^^^^^^^^^^^^^^^^^
      method.assign_constants ();
      method.code.finalize_labels ();
}

________________________________________________________________
B. Narasimhan                            naras@stat.stanford.edu
                             http://www-stat.stanford.edu/~naras