[jboss-jira] [JBoss JIRA] (JASSIST-146) ClassFile.compact mangles large class files
Shigeru Chiba (Commented) (JIRA)
jira-events at lists.jboss.org
Fri Nov 4 10:16:46 EDT 2011
[ https://issues.jboss.org/browse/JASSIST-146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12640097#comment-12640097 ]
Shigeru Chiba commented on JASSIST-146:
---------------------------------------
The constant pool had been overflowed after executing compact() in the test case
since too many redundant constant pool items were added.
I modified the ConstPool class so that it would not add a duplicated item.
> ClassFile.compact mangles large class files
> -------------------------------------------
>
> Key: JASSIST-146
> URL: https://issues.jboss.org/browse/JASSIST-146
> Project: Javassist
> Issue Type: Bug
> Affects Versions: 3.15.0-GA
> Environment: Fedora Linux 14 x86_64, Java 1.6.0_27
> Reporter: Paul Rupe
> Assignee: Shigeru Chiba
>
> I have a large .class file (1307829 bytes). Simply reading it in using javassist, calling ClassFile.compact(), then writing it out to a new file creates an invalid class file that is substantially larger (1996560 bytes).
> javap -c throws an EOFException:
> java.io.EOFException
> at java.io.DataInputStream.readFully(DataInputStream.java:197)
> at java.io.DataInputStream.readFully(DataInputStream.java:169)
> at sun.tools.javap.AttrData.read(AttrData.java:54)
> at sun.tools.javap.FieldData.read(FieldData.java:91)
> at sun.tools.javap.ClassData.readFields(ClassData.java:211)
> at sun.tools.javap.ClassData.read(ClassData.java:114)
> at sun.tools.javap.ClassData.<init>(ClassData.java:70)
> at sun.tools.javap.JavapPrinter.<init>(JavapPrinter.java:48)
> at sun.tools.javap.Main.displayResults(Main.java:208)
> at sun.tools.javap.Main.perform(Main.java:79)
> at sun.tools.javap.Main.entry(Main.java:67)
> at sun.tools.javap.Main.main(Main.java:52)
> javassist throws an exception trying to read back the class file it just created:
> java.lang.ClassCastException: javassist.bytecode.FieldrefInfo cannot be cast to javassist.bytecode.Utf8Info
> at javassist.bytecode.ConstPool.getUtf8Info(ConstPool.java:615)
> at javassist.bytecode.AttributeInfo.read(AttributeInfo.java:76)
> at javassist.bytecode.FieldInfo.read(FieldInfo.java:253)
> at javassist.bytecode.FieldInfo.<init>(FieldInfo.java:63)
> at javassist.bytecode.ClassFile.read(ClassFile.java:783)
> at javassist.bytecode.ClassFile.<init>(ClassFile.java:109)
> at Test.compact(Test.java:21)
> at Test.main(Test.java:12)
> Attempting to use the new class file in an application results in
> java.lang.ClassFormatError: Invalid this class index 537 in constant pool in class file WorldGenCreateGuild
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list