[jboss-jira] [JBoss JIRA] Closed: (JASSIST-72) Instrumenting write access using CodeConverter.replaceArrayAccess(...) causes VerifyError (Unable to pop operand off an empty stack) - buggy aastore
Shigeru Chiba (JIRA)
jira-events at lists.jboss.org
Thu Apr 15 10:55:27 EDT 2010
[ https://jira.jboss.org/jira/browse/JASSIST-72?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shigeru Chiba closed JASSIST-72.
--------------------------------
> Instrumenting write access using CodeConverter.replaceArrayAccess(...) causes VerifyError (Unable to pop operand off an empty stack) - buggy aastore
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: JASSIST-72
> URL: https://jira.jboss.org/jira/browse/JASSIST-72
> Project: Javassist
> Issue Type: Bug
> Environment: javassist 3.9.0.GA
> Reporter: Martin Burger
> Assignee: Shigeru Chiba
> Attachments: array_issue.tgz
>
>
> I use Javassist to instrument class files in order to catch some runtime information. Basically, I insert probes to get information about method calls, field accesses, and so on. This includes access to arrays. Unfortunately, when I instrument array accesses using CodeConverter.replaceArrayAccess(...) the Java verifier throws an exception while loading the changed method: Unable to pop operand off an empty stack.
> Instrumenting array accesses is one instrumentation of many. If I disable instrumentation of array accesses, the instrumented program will run and I will get runtime information about method calls etc. As soon as I enable the instrumentation of arrays, the byte code created by javassist causes the java.lang.VerifyError mentioned above.
> The buggy byte code instruction seems to be:
> 7016: anewarray #51; //class java/lang/Object
> 7019: dup
> 7020: iconst_0
> 7021: iload_1
> 7022: bipush 56
> 7024: if_icmpne 7036
> 7027: ldc_w #5369; //String 8
> 7030: nop
> 7031: nop
> 7032: nop
> 7033: goto 7042
> 7036: ldc_w #5371; //String 9
> 7039: nop
> 7040: nop
> 7041: nop
> 7042: invokestatic #5373;
> 7045: nop
> 7046: aastore <-- causes VerifyError
> At least when executing aastore the stack is empty already.
> The original source code:
> if (base == 8 && c >= '8') {
> Object[] errArgs = { c == '8' ? "8" : "9" };
> reportCurrentLineWarning(
> "msg.bad.octal.literal", errArgs);
> base = 10;
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list