[Soot-list] Interface Invoke marked as Virtual Invoke in the bytecode

Marc-André Laverdière marc-andre.laverdiere-papineau at polymtl.ca
Fri Aug 2 15:46:42 EDT 2013


It turns out that I found a real world scenario :(

mysql-connector-java-5.1.15-bin.jar has this class as an interface,
whereas it is a class in mysql-connector-java-5.0.4-bin.jar, and both
are on the class path.

The matter of conflicting class definitions is not going away. I think
we need some kind of way of dealing with that. Or at least to warn the
user...

On 08/02/2013 12:45 PM, Phil Pratt-Szeliga wrote:
> Hi Marc-Andre,
> 
> That is an issue with classloading. I don't remember the cases that
> this happens.
> 
> Phil Pratt-Szeliga
> Syracuse University
> http://trifort.org/
> 
> On Fri, Aug 2, 2013 at 12:38 PM, Marc-André Laverdière
> <marc-andre.laverdiere-papineau at polymtl.ca> wrote:
>> Hello,
>>
>> I got this crash when analyzing some system (of which I know almost
>> nothing about) when running Spark.
>>
>> I could try to put some logic around this, but I am actually interested
>> in finding out if this is a real bug in our .class file loader.
>>
>> Or is it that there could be some kind of classpath issue, where one
>> class is labeled as interface in a jar, but it is a non-interface is
>> another jar? (I can't think of real-world case of that.
>>
>> Exception in thread "main" java.lang.RuntimeException: Trying to create
>> virtual invoke expression for interface type. Use JInterfaceInvokeExpr
>> instead!
>>         at
>> soot.jimple.internal.JVirtualInvokeExpr.<init>(JVirtualInvokeExpr.java:45)
>>         at soot.jimple.Jimple.newVirtualInvokeExpr(Jimple.java:464)
>>         at soot.coffi.CFG.generateJimple(CFG.java:4378)
>>         at soot.coffi.CFG.jimplify(CFG.java:1237)
>>         at soot.coffi.CFG.jimplify(CFG.java:925)
>>         at soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:107)
>>         at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:89)
>>         at soot.SootMethod.retrieveActiveBody(SootMethod.java:324)
>>         at
>> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:532)
>>         at
>> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:427)
>>         at soot.jimple.spark.solver.OnFlyCallGraph.build(OnFlyCallGraph.java:55)
>>         at // ...
>> --
>> Marc-André Laverdière-Papineau
>> Doctorant - PhD Candidate
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> 

-- 
Marc-André Laverdière-Papineau
Doctorant - PhD Candidate


More information about the Soot-list mailing list