[jboss-jira] [JBoss JIRA] (JASSIST-152) instrumentation fails when building stackmap for local var of array type : bad array type for AALOAD: null
Yanic Inghelbrecht (JIRA)
jira-events at lists.jboss.org
Thu Feb 9 08:22:48 EST 2012
[ https://issues.jboss.org/browse/JASSIST-152?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12665335#comment-12665335 ]
Yanic Inghelbrecht commented on JASSIST-152:
--------------------------------------------
I've traced the failure to class javassist.bytecode.stackmap.TypeData, in particular the nested class ArrayElement.
That class has a method getName :
public String getName() throws BadBytecode {
String name = array.getName();
if (name.length() > 1 && name.charAt(0) == '[') {
char c = name.charAt(1);
if (c == 'L')
return name.substring(2, name.length() - 1).replace('/', '.');
else if (c == '[')
return name.substring(1);
}
throw new BadBytecode("bad array type for AALOAD: "
+ name);
}
In this test case the local variable 'name' is null.
However, the expectedName is not null. I was able to circumvent the issue by changing the initialisation of that local variable from
String name = array.getName();
to
String name = array.getExpectedName();
I don't really understand the intricacies of the stackmap building code, so that is probably not the right fix for this issue.
Best regards,
Yanic
> instrumentation fails when building stackmap for local var of array type : bad array type for AALOAD: null
> ----------------------------------------------------------------------------------------------------------
>
> Key: JASSIST-152
> URL: https://issues.jboss.org/browse/JASSIST-152
> Project: Javassist
> Issue Type: Bug
> Affects Versions: 3.15.0-GA
> Environment: Any
> Reporter: Yanic Inghelbrecht
> Assignee: Shigeru Chiba
> Attachments: demonstration.zip
>
>
> When trying to instrument the attached org.hibernate.cfg.AbstractPropertyHolder (copied from the hibernate 4.0.1 final distribution), instrumentation fails with the following exception :
> java.lang.RuntimeException: fatal error:
> at javassist.bytecode.stackmap.TypeData$TypeName.getTypeData(TypeData.java:177)
> at javassist.bytecode.stackmap.MapMaker.fillStackMap(MapMaker.java:410)
> at javassist.bytecode.stackmap.MapMaker.toStackMapBody(MapMaker.java:393)
> at javassist.bytecode.stackmap.MapMaker.toStackMap(MapMaker.java:323)
> at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:98)
> at javassist.bytecode.MethodInfo.rebuildStackMap(MethodInfo.java:417)
> at javassist.bytecode.MethodInfo.rebuildStackMapIf6(MethodInfo.java:399)
> at javassist.expr.ExprEditor.doit(ExprEditor.java:113)
> at javassist.CtBehavior.instrument(CtBehavior.java:672)
> at test_abstractpropertyholder.SimpleTranslator.modify(SimpleTranslator.java:25)
> at test_abstractpropertyholder.SimpleTranslator.onLoad(SimpleTranslator.java:19)
> at test_abstractpropertyholder.JavassistInstrumenter.getInstrumentedClass(JavassistInstrumenter.java:21)
> at test_abstractpropertyholder.Main.main(Main.java:32)transforming org.hibernate.cfg.AbstractPropertyHolder
> Caused by: javassist.bytecode.BadBytecode: bad array type for AALOAD: null
> at javassist.bytecode.stackmap.TypeData$ArrayElement.getName(TypeData.java:422)
> at javassist.bytecode.stackmap.TypeData$TypeName.getExpected(TypeData.java:292)
> at javassist.bytecode.stackmap.TypeData$TypeName.getTypeData(TypeData.java:175)
> ... 12 more
--
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