[Soot-list] Do I understand traps?

Martin Schäf martinschaef at googlemail.com
Tue Jan 17 05:42:58 EST 2012


Now that's a problem :( Look at my jimple code below....
I got this output as follow:
 - I use a custom subclass of BodyTransformer  (just like in your tutorial)
@Override
	protected void internalTransform(Body arg0, String arg1, Map arg2) {
		SootMethod sootMethod = arg0.getMethod();
		if (sootMethod.getName().contains("setCaretPosition") ) {
			//BREAKPOINT
		}

at the Breakpoint I check the value of SootMethod.ActiveBody ... which
has a trap.

I just redownloaded sootclasses-2.4.0.jar from the webpage ...
Here is the Jimple code:


    public void setCaretPosition(int)
    {
        terpword.EkitCore r0;
        int i0;
        boolean z0, z1;
        java.lang.IllegalArgumentException r1, $r3;
        javax.swing.JTextPane $r2;

        r0 := @this: terpword.EkitCore;
/*3956*/
        i0 := @parameter0: int;
/*3956*/
        z0 = 1;
/*3956*/
/*3956*/

     label0:
        z1 = 1;
/*3958*/
/*3958*/

     label1:
        $r2 = r0.<terpword.EkitCore: javax.swing.JTextPane jtpMain>;
/*3960*/
        virtualinvoke $r2.<javax.swing.JTextPane: void
setCaretPosition(int)>(i0);
/*3960*/

     label2:
        goto label4;
/*3964*/

     label3:
        $r3 := @caughtexception;
/*3961*/
        r1 = $r3;
/*3961*/
        z1 = 0;
/*3962*/
/*3962*/
        i0 = i0 + -1;
/*3963*/

     label4:
        if z1 != 0 goto label5;
/*3965*/

        if i0 >= 0 goto label0;
/*3965*/

     label5:
        return;
/*3966*/

        catch java.lang.IllegalArgumentException from label1 to label2
with label3;
    }



2012/1/17 Eric Bodden <eric.bodden at ec-spride.de>:
> Are you maybe using an old/buggy version of Soot? For me Soot
> generates this Jimple code, which has no traps:
>
>   public void setCaretPosition(int)
>    {
>        javax.swing.text.JTextComponent r0;
>        int i0, $i1;
>        javax.swing.text.Document r1;
>        java.lang.StringBuilder $r2, $r4, $r5;
>        java.lang.IllegalArgumentException $r3;
>        java.lang.String $r6;
>        javax.swing.text.Caret $r7;
>
>        r0 := @this: javax.swing.text.JTextComponent;
>        i0 := @parameter0: int;
>        r1 = virtualinvoke r0.<javax.swing.text.JTextComponent:
> javax.swing.text.Document getDocument()>();
>        if r1 == null goto label2;
>
>        $i1 = interfaceinvoke r1.<javax.swing.text.Document: int getLength()>();
>        if i0 > $i1 goto label0;
>
>        if i0 >= 0 goto label1;
>
>     label0:
>        $r3 = new java.lang.IllegalArgumentException;
>        $r2 = new java.lang.StringBuilder;
>        specialinvoke $r2.<java.lang.StringBuilder: void <init>()>();
>        $r4 = virtualinvoke $r2.<java.lang.StringBuilder:
> java.lang.StringBuilder append(java.lang.String)>("bad position: ");
>        $r5 = virtualinvoke $r4.<java.lang.StringBuilder:
> java.lang.StringBuilder append(int)>(i0);
>        $r6 = virtualinvoke $r5.<java.lang.StringBuilder:
> java.lang.String toString()>();
>        specialinvoke $r3.<java.lang.IllegalArgumentException: void
> <init>(java.lang.String)>($r6);
>        throw $r3;
>
>     label1:
>        $r7 = r0.<javax.swing.text.JTextComponent:
> javax.swing.text.Caret caret>;
>        interfaceinvoke $r7.<javax.swing.text.Caret: void setDot(int)>(i0);
>
>     label2:
>        return;
>    }
>
>
> Eric
> On 17 January 2012 11:18, Martin Schäf <martinschaef at googlemail.com> wrote:
>> Well, the thing with the throws clause is cool with me... but I do not
>> understand why this method has a trap.
>> If you look at the source code of javap
>> javax.swing.text.JTextComponent (see my last email), the exception is
>> not caught ...
>> But the SootMethod definitely has a trap referring to a "r..:=
>> $caughtexception ..$ statement which I do not see in the Java program.
>>
>>
>> 2012/1/17 Eric Bodden <eric.bodden at ec-spride.de>:
>>> Hi Martin.
>>>
>>> While this exception is documented in the JavaDoc, there is no actual
>>> exception annotation on the method in the JDK's bytecode:
>>>
>>> $ javap javax.swing.text.JTextComponent | grep setCaretPosition
>>>    public void setCaretPosition(int);
>>>
>>> You can also see it in the source...
>>>
>>>>            public void setCaretPosition(int position) {
>>>
>>> That's why Soot says that the method "does not throw anything".
>>> Basically, this means that the method does not throw any *checked*
>>> exceptions.
>>>
>>>> When debugging into the sootMethod, I find a trap that handles this
>>>> exception including a catch-block, i.e., it is not thrown out.
>>>
>>> The trap would then originate from a try/catch block in the source
>>> code this sootMethod was generated from.
>>>
>>> Eric
>
>
>
> --
> 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