[Soot-list] interface invoke expression for non-interface type

Eric Bodden eric.bodden at ec-spride.de
Fri Jan 20 05:56:52 EST 2012


Hmm, I can confirm this is a bug. It's a nested JSR, that for some
reason does not get eliminated. As I said, I guess this bug does not
get triggered often because this is really odd code. I wonder what
compiler the lucene folks are using...

I may look into this some more when I have more time, but not today.
Tillmann, could you open a bug reprot and attach the class file to it?
Thanks

Eric

On 19 January 2012 17:32, Eric Bodden <eric.bodden at ec-spride.de> wrote:
> Tillmann, could you send me the .class file by email? Then I will try
> to reproduce this here.
>
> Eric
>
> On 19 January 2012 17:05, Tillmann <tirunkel at informatik.uni-bremen.de> wrote:
>>
>>>> I've checked this with the stable v2.4. The trunk-version seems to be
>>>> more
>>>> forgiving about class resolving. Without the allow-phantom-refs-option
>>>> soot2.4 exits with an Exception that indicates the missing Class (in my
>>>> case
>>>> the Authentication of the Spring Framework) If i add the relevant parts
>>>> of
>>>> the Spring-Framework, the classloading seems to be okay. So i switched
>>>> back
>>>> to the trunk-version of soot but now during the CHA-Transformation
>>>> following
>>>> occurs:
>>>>
>>>> Exception in thread "main" java.lang.RuntimeException: Unrecognized
>>>> bytecode
>>>> instruction: 168
>>>>    at soot.coffi.CFG.generateJimple(CFG.java:4637)
>>>>    at soot.coffi.CFG.jimplify(CFG.java:1267)
>>>>
>>>> with 2.4 the same occurs:
>>>>
>>>> Exception in thread "main" java.lang.RuntimeException: Unrecognized
>>>> bytecode
>>>> instruction: 168
>>>>    at soot.coffi.CFG.generateJimple(CFG.java:4644)
>>>>    at soot.coffi.CFG.jimplify(CFG.java:1263)
>>>>    at soot.coffi.CFG.jimplify(CFG.java:951)
>>>>
>>>> So i will take a closer look at the bytecode. I'll keep you current.
>>>
>>> This is odd for two reasons: First, 168 is a JSR bytecode, which has
>>> been deprecated for ages. Second, though, Soot usually should handle
>>> JSRs correctly, converting them into other equivalent bytecodes.
>>> Having said that, I am not sure when someone last loaded a class file
>>> with a JSR into Soot...
>>>
>>> Eric
>>
>>
>> the problem occurs when parsing the following Instruction (in
>> org.apache.lucene.store.NativeFSLock.class - part of apache's lucene-core
>> library)
>>
>> 73: jsr[73]    79
>>
>> by generateJimple(...) in CFG:2924
>>
>> in which step the jsr-handling takes place?
>>
>> Regards
>>
>> Tillmann
>>
>> surrounding bytecode:
>>
>> // Method descriptor #80 ()V
>>  // Stack: 4, Locals: 9
>>  public synchronized void release() throws java.io.IOException;
>>      0  aload_0 [this]
>>      1  invokespecial org.apache.lucene.store.NativeFSLock.lockExists() :
>> boolean [7]
>>      4  ifeq 167
>>      7  aload_0 [this]
>>      8  getfield org.apache.lucene.store.NativeFSLock.lock :
>> java.nio.channels.FileLock [6]
>>     11  invokevirtual java.nio.channels.FileLock.release() : void [35]
>>     14  jsr 26
>>     17  goto 127
>>     20  astore_1
>>     21  jsr 26
>>     24  aload_1
>>     25  athrow
>>     26  astore_2
>>     27  aload_0 [this]
>>     28  aconst_null
>>     29  putfield org.apache.lucene.store.NativeFSLock.lock :
>> java.nio.channels.FileLock [6]
>>     32  aload_0 [this]
>>     33  getfield org.apache.lucene.store.NativeFSLock.channel :
>> java.nio.channels.FileChannel [30]
>>     36  invokevirtual java.nio.channels.FileChannel.close() : void [32]
>>     39  jsr 51
>>     42  goto 125
>>     45  astore_3
>>     46  jsr 51
>>     49  aload_3
>>     50  athrow
>>     51  astore 4
>>     53  aload_0 [this]
>>     54  aconst_null
>>     55  putfield org.apache.lucene.store.NativeFSLock.channel :
>> java.nio.channels.FileChannel [30]
>>     58  aload_0 [this]
>>     59  getfield org.apache.lucene.store.NativeFSLock.f :
>> java.io.RandomAccessFile [27]
>>     62  invokevirtual java.io.RandomAccessFile.close() : void [33]
>>     65  jsr 79
>>     68  goto 123
>>     71  astore 5
>>     73  jsr 79 // <-- BAD LINE!
>>     76  aload 5
>>     78  athrow
>>     79  astore 6
>>     81  aload_0 [this]
>>     82  aconst_null
>>     83  putfield org.apache.lucene.store.NativeFSLock.f :
>> java.io.RandomAccessFile [27]
>>     86  getstatic org.apache.lucene.store.NativeFSLock.LOCK_HELD :
>> java.util.HashSet [21]
>> ...
>
>
>
> --
> Eric Bodden, Ph.D., http://bodden.de/
> Head of Secure Software Engineering Group at EC SPRIDE
> Principal Investigator in Secure Services at CASED
> Tel: +49 6151 16-75422    Fax: +49 6151 16-72051
> Room 3.2.14, Mornewegstr. 30, 64293 Darmstadt



-- 
Eric Bodden, Ph.D., http://bodden.de/
Head of Secure Software Engineering Group at EC SPRIDE
Principal Investigator in Secure Services at CASED
Tel: +49 6151 16-75422    Fax: +49 6151 16-72051
Room 3.2.14, Mornewegstr. 30, 64293 Darmstadt


More information about the Soot-list mailing list