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)