You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Emmanuel Bourg (JIRA)" <ji...@apache.org> on 2014/04/24 16:46:19 UTC
[jira] [Updated] (BCEL-29) ReferenceType.getFirstCommonSuperclass:
Does not recognize UninitializedObjectType
[ https://issues.apache.org/jira/browse/BCEL-29?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Bourg updated BCEL-29:
-------------------------------
Description:
Here's a little gem that causes BCEL's verifier to crash:
(Compile the following with the bytecode assembler Jasmin)
{code}
.class public Test47
.super java/lang/Object
.method public foo(B)V
.limit stack 10
.limit locals 10
iload_1
ifne ELSE_0
new java/io/BufferedInputStream
goto ENDIF_0
ELSE_0:
new java/io/FilterInputStream
ENDIF_0:
pop
return
.end method
{code}
The error generated is as follows:
{code}
Exception in thread "main" org.apache.bcel.verifier.exc.AssertionViolatedException: INTERNAL
ERROR: Some RuntimeException occured while verify()ing class 'Test47', method 'public void
foo(byte arg1)'. Original RuntimeException's stack trace:
---
java.lang.ClassCastException
at
org.apache.bcel.generic.ReferenceType.getFirstCommonSuperclass(ReferenceType.java:256)
at org.apache.bcel.verifier.structurals.OperandStack.merge(OperandStack.java:254)
at
org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.mergeInFrames(Cont
rolFlowGraph.java:246)
at
org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.execute(ControlFlow
Graph.java:189)
at org.apache.bcel.verifier.structurals.Pass3bVerifier.circulationPump(Pass3bVerifier.java:228)
at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:342)
at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
at ClassVerifier.verify(ClassVerifier.java:33)
at ClassInfo.verify(ClassInfo.java:51)
at Main.main(Main.java:7)
---
at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:356)
at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
at ClassVerifier.verify(ClassVerifier.java:33)
at ClassInfo.verify(ClassInfo.java:51)
at Main.main(Main.java:7)
{code}
It appears that {{ReferenceType.getFirstCommonSuperclass()}} is not designed to handle the org.apache.bcel.verifier.structurals.UninitializedObjectType ReferenceType that is used by BCEL's verifier.
was:
Here's a little gem that causes BCEL's verifier to crash:
(Compile the following with the bytecode assembler Jasmin)
.class public Test47
.super java/lang/Object
.method public foo(B)V
.limit stack 10
.limit locals 10
iload_1
ifne ELSE_0
new java/io/BufferedInputStream
goto ENDIF_0
ELSE_0:
new java/io/FilterInputStream
ENDIF_0:
pop
return
.end method
The error generated is as follows:
Exception in thread "main" org.apache.bcel.verifier.exc.AssertionViolatedException: INTERNAL
ERROR: Some RuntimeException occured while verify()ing class 'Test47', method 'public void
foo(byte arg1)'. Original RuntimeException's stack trace:
---
java.lang.ClassCastException
at
org.apache.bcel.generic.ReferenceType.getFirstCommonSuperclass(ReferenceType.java:256)
at org.apache.bcel.verifier.structurals.OperandStack.merge(OperandStack.java:254)
at
org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.mergeInFrames(Cont
rolFlowGraph.java:246)
at
org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.execute(ControlFlow
Graph.java:189)
at org.apache.bcel.verifier.structurals.Pass3bVerifier.circulationPump(Pass3bVerifier.java:228)
at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:342)
at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
at ClassVerifier.verify(ClassVerifier.java:33)
at ClassInfo.verify(ClassInfo.java:51)
at Main.main(Main.java:7)
---
at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:356)
at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
at ClassVerifier.verify(ClassVerifier.java:33)
at ClassInfo.verify(ClassInfo.java:51)
at Main.main(Main.java:7)
It appears that ReferenceType.getFirstCommonSuperclass() is not designed to handle the
org.apache.bcel.verifier.structurals.UninitializedObjectType ReferenceType that is used by BCEL's
verifier.
Priority: Major
Environment: (was: Operating System: All
Platform: All)
Priority: (was: P4)
Severity: (was: normal)
> ReferenceType.getFirstCommonSuperclass: Does not recognize UninitializedObjectType
> ----------------------------------------------------------------------------------
>
> Key: BCEL-29
> URL: https://issues.apache.org/jira/browse/BCEL-29
> Project: Commons BCEL
> Issue Type: Bug
> Components: Main
> Affects Versions: 5.1
> Reporter: David Foster
> Assignee: Apache Commons Developers
>
> Here's a little gem that causes BCEL's verifier to crash:
> (Compile the following with the bytecode assembler Jasmin)
> {code}
> .class public Test47
> .super java/lang/Object
> .method public foo(B)V
> .limit stack 10
> .limit locals 10
>
> iload_1
> ifne ELSE_0
> new java/io/BufferedInputStream
> goto ENDIF_0
> ELSE_0:
> new java/io/FilterInputStream
> ENDIF_0:
> pop
>
> return
> .end method
> {code}
> The error generated is as follows:
> {code}
> Exception in thread "main" org.apache.bcel.verifier.exc.AssertionViolatedException: INTERNAL
> ERROR: Some RuntimeException occured while verify()ing class 'Test47', method 'public void
> foo(byte arg1)'. Original RuntimeException's stack trace:
> ---
> java.lang.ClassCastException
> at
> org.apache.bcel.generic.ReferenceType.getFirstCommonSuperclass(ReferenceType.java:256)
> at org.apache.bcel.verifier.structurals.OperandStack.merge(OperandStack.java:254)
> at
> org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.mergeInFrames(Cont
> rolFlowGraph.java:246)
> at
> org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.execute(ControlFlow
> Graph.java:189)
> at org.apache.bcel.verifier.structurals.Pass3bVerifier.circulationPump(Pass3bVerifier.java:228)
> at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:342)
> at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
> at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
> at ClassVerifier.verify(ClassVerifier.java:33)
> at ClassInfo.verify(ClassInfo.java:51)
> at Main.main(Main.java:7)
> ---
> at org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:356)
> at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:108)
> at org.apache.bcel.verifier.Verifier.doPass3b(Verifier.java:133)
> at ClassVerifier.verify(ClassVerifier.java:33)
> at ClassInfo.verify(ClassInfo.java:51)
> at Main.main(Main.java:7)
> {code}
> It appears that {{ReferenceType.getFirstCommonSuperclass()}} is not designed to handle the org.apache.bcel.verifier.structurals.UninitializedObjectType ReferenceType that is used by BCEL's verifier.
--
This message was sent by Atlassian JIRA
(v6.2#6252)