[Soot-list] Error in Shimple

Ishan Khot ishankhot.ik at gmail.com
Wed Jun 26 08:36:57 EDT 2013


Here is the complete graph object with the jimple body of the method that
gets formed. The block 23 is the one where the error occurs. This block has
no predecessors and the dominator List of this block contains all the
blocks. Hence an immediate dominator for this block cannot be found in the
graph object which causes the exception to be triggered. Also this graph
has only one head which is block 0.

Block 0:
[preds: ] [succs: 1 ]

Block 1:
[preds: 0 ] [succs: 2 3 ]
$r0 := @this: com.mobilityflow.atorrent.utils.l;
$r1 := @parameter0: java.lang.String;
specialinvoke $r0.<java.lang.Object: void <init>()>();
$r0.<com.mobilityflow.atorrent.utils.l: java.lang.String a> = $r1;
$r3 = virtualinvoke $r1.<java.lang.String: java.lang.String
replace(java.lang.CharSequence,java.lang.CharSequence)>("magnet:",
"magnet:/");
$r4 = staticinvoke <android.net.Uri: android.net.Uri
parse(java.lang.String)>($r3);
$r3 = virtualinvoke $r4.<android.net.Uri: java.lang.String getScheme()>();
if $r3 != null goto $r3 = virtualinvoke $r4.<android.net.Uri:
java.lang.String getScheme()>();

Block 2:
[preds: 1 ] [succs: 27 ]
r18 = new java.lang.IllegalArgumentException;
specialinvoke r18.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("No scheme, MUST be magnet.");
throw r18;

Block 3:
[preds: 1 ] [succs: 4 5 8 ]
$r3 = virtualinvoke $r4.<android.net.Uri: java.lang.String getScheme()>();
$z0 = virtualinvoke $r3.<java.lang.String: boolean
equals(java.lang.Object)>("magnet");
if $z0 != 0 goto $r3 = virtualinvoke $r4.<android.net.Uri: java.lang.String
getQueryParameter(java.lang.String)>("xt");

Block 4:
[preds: 3 ] [succs: 27 ]
r18 = new java.lang.IllegalArgumentException;
r19 = new java.lang.StringBuilder;
specialinvoke r19.<java.lang.StringBuilder: void <init>()>();
$r8 = virtualinvoke r19.<java.lang.StringBuilder: java.lang.StringBuilder
append(java.lang.String)>("Illegal scheme: ");
$r3 = virtualinvoke $r4.<android.net.Uri: java.lang.String getScheme()>();
$r8 = virtualinvoke $r8.<java.lang.StringBuilder: java.lang.StringBuilder
append(java.lang.String)>($r3);
$r3 = virtualinvoke $r8.<java.lang.StringBuilder: java.lang.String
toString()>();
specialinvoke r18.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>($r3);
throw r18;

Block 5:
[preds: 3 ] [succs: 6 8 ]
$r3 = virtualinvoke $r4.<android.net.Uri: java.lang.String
getQueryParameter(java.lang.String)>("xt");

Block 6:
[preds: 5 ] [succs: 7 9 ]
if $r3 != null goto $r10 = staticinvoke <java.util.regex.Pattern:
java.util.regex.Pattern
compile(java.lang.String)>("^urn:btih:([a-fA-F0-9]{40})$");

Block 7:
[preds: 6 ] [succs: 27 ]
r18 = new java.lang.IllegalArgumentException;
specialinvoke r18.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("No info hash parameter.");
throw r18;

Block 8:
[preds: 3 5 ] [succs: 27 ]
$r9 := @caughtexception;
r18 = new java.lang.IllegalArgumentException;
specialinvoke r18.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("No info hash parameter.");
throw r18;

Block 9:
[preds: 6 ] [succs: 10 11 ]
$r10 = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern
compile(java.lang.String)>("^urn:btih:([a-fA-F0-9]{40})$");
$r11 = virtualinvoke $r10.<java.util.regex.Pattern: java.util.regex.Matcher
matcher(java.lang.CharSequence)>($r3);
$z0 = virtualinvoke $r11.<java.util.regex.Matcher: boolean matches()>();
if $z0 != 0 goto $r3 = virtualinvoke $r11.<java.util.regex.Matcher:
java.lang.String group(int)>(1);

Block 10:
[preds: 9 ] [succs: 27 ]
r18 = new java.lang.IllegalArgumentException;
r19 = new java.lang.StringBuilder;
specialinvoke r19.<java.lang.StringBuilder: void <init>()>();
$r8 = virtualinvoke r19.<java.lang.StringBuilder: java.lang.StringBuilder
append(java.lang.String)>("Illegal info hash parameter: ");
$r8 = virtualinvoke $r8.<java.lang.StringBuilder: java.lang.StringBuilder
append(java.lang.String)>($r3);
$r3 = virtualinvoke $r8.<java.lang.StringBuilder: java.lang.String
toString()>();
specialinvoke r18.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>($r3);
throw r18;

Block 11:
[preds: 9 ] [succs: 12 22 ]
$r3 = virtualinvoke $r11.<java.util.regex.Matcher: java.lang.String
group(int)>(1);
$r3 = virtualinvoke $r3.<java.lang.String: java.lang.String
toLowerCase()>();
$r12 = staticinvoke <com.mobilityflow.atorrent.utils.d: byte[]
b(java.lang.String)>($r3);
$r0.<com.mobilityflow.atorrent.utils.l: byte[] b> = $r12;
$r3 = "unknown";

Block 12:
[preds: 11 ] [succs: 13 22 ]
$r2 = virtualinvoke $r4.<android.net.Uri: java.lang.String
getQueryParameter(java.lang.String)>("dn");

Block 13:
[preds: 12 ] [succs: 14 16 22 ]
if $r2 == null goto $r0.<com.mobilityflow.atorrent.utils.l:
java.lang.String c> = $r3;

Block 14:
[preds: 13 ] [succs: 15 22 ]
$r2 = staticinvoke <java.net.URLDecoder: java.lang.String
decode(java.lang.String,java.lang.String)>($r2, "UTF-8");

Block 15:
[preds: 14 ] [succs: 16 ]
$r3 = $r2;

Block 16:
[preds: 13 15 22 ] [succs: 17 ]
$r0.<com.mobilityflow.atorrent.utils.l: java.lang.String c> = $r3;
$r13 = virtualinvoke $r4.<android.net.Uri: java.util.List
getQueryParameters(java.lang.String)>("tr");
$i0 = interfaceinvoke $r13.<java.util.List: int size()>();
$r5 = newarray (java.lang.String)[$i0];
$r0.<com.mobilityflow.atorrent.utils.l: java.lang.String[] d> = $r5;
$r14 = interfaceinvoke $r13.<java.util.List: java.util.Iterator
iterator()>();
$i0 = 0;

Block 17:
[preds: 16 21 ] [succs: 18 25 ]
$z0 = interfaceinvoke $r14.<java.util.Iterator: boolean hasNext()>();
if $z0 == 0 goto return;

Block 18:
[preds: 17 ] [succs: 19 26 ]
$r15 = interfaceinvoke $r14.<java.util.Iterator: java.lang.Object next()>();
$r2 = (java.lang.String) $r15;
$r5 = $r0.<com.mobilityflow.atorrent.utils.l: java.lang.String[] d>;
$i1 = $i0 + 1;

Block 19:
[preds: 18 ] [succs: 20 26 ]
$r3 = staticinvoke <java.net.URLDecoder: java.lang.String
decode(java.lang.String,java.lang.String)>($r2, "UTF-8");

Block 20:
[preds: 19 ] [succs: 21 ]
$r5[$i0] = $r3;

Block 21:
[preds: 20 24 ] [succs: 17 ]
$i0 = $i1;
goto [?= $z0 = interfaceinvoke $r14.<java.util.Iterator: boolean
hasNext()>()];

Block 22:
[preds: 11 12 13 14 ] [succs: 16 ]
$r16 := @caughtexception;
virtualinvoke $r16.<java.io.UnsupportedEncodingException: void
printStackTrace()>();
goto [?= $r0.<com.mobilityflow.atorrent.utils.l: java.lang.String c> = $r3];

Block 23:
[preds: ] [succs: 24 ]
$r17 := @caughtexception;
$i1 = (int) $r3;
$r6 = $r17;

Block 24:
[preds: 23 26 ] [succs: 21 ]
virtualinvoke $r6.<java.io.UnsupportedEncodingException: void
printStackTrace()>();
goto [?= $i0 = $i1];

Block 25:
[preds: 17 ] [succs: 27 ]
return;

Block 26:
[preds: 18 19 ] [succs: 24 ]
$r6 := @caughtexception;
goto [?= virtualinvoke $r6.<java.io.UnsupportedEncodingException: void
printStackTrace()>()];

Block 27:
[preds: 2 4 7 8 10 25 ] [succs: ]

Thanks


On Wed, Jun 26, 2013 at 12:26 PM, Quentin Sabah <quentin.sabah at inria.fr>wrote:

> Hi,
>
> > When we tried to debug the error on our part, we found that the error
> > comes whenever there is a method whose Block Graph (CFG) contains a
> > block which has no predecessors and is neither the head.
>
> I have seen similar CFG, where an exception trap statement has no
> predecessor, when using an ExceptionalUnitGraph. Have you identified the
> content of this problematic block ?
>
>
> --
> Quentin Sabah, CIFRE Ph.D. student
> Grenoble University
> INRIA-SPADES                   | STMicroelectronics/AST
> Montbonnot, France             | Grenoble, France
> mailto:quentin.sabah at inria.fr  | mailto:quentin.sabah at st.com
> phone: +33 476 61 54 57        | phone: +33 476 58 44 14
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>



-- 
Ishan Khot
Undergraduate Student
Computer Science Department
IIT Delhi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20130626/7c78defa/attachment-0001.html 


More information about the Soot-list mailing list