[Soot-list] Spark Error with Flowdroid
Marc-André Laverdière-Papineau
marc-andre.laverdiere-papineau at polymtl.ca
Sat Jun 15 16:25:48 EDT 2013
Hello,
I decided to just catch the exception :) From what I can tell, it is not
picking up the type com.oreilly.servlet.multipart.Part for l8
Exception in thread "main" java.lang.RuntimeException: Error building
local in method <com.oreilly.servlet.MultipartRequest: void
<init>(javax.servlet.http.HttpServletRequest,java.lang.String,int,java.lang.String,com.oreilly.servlet.multipart.FileRenamePolicy)>
for local: l8
Body: public void <init>(javax.servlet.http.HttpServletRequest,
java.lang.String, int, java.lang.String,
com.oreilly.servlet.multipart.FileRenamePolicy) throws java.io.IOException
{
com.oreilly.servlet.MultipartRequest this;
javax.servlet.http.HttpServletRequest request;
java.lang.String saveDirectory, encoding, name, value, fileName,
$r10, $r15, $r17, $r18, $r21, $r31, $r32, $r33;
int maxPostSize, i, $i0;
com.oreilly.servlet.multipart.FileRenamePolicy policy;
java.util.Hashtable $r0, queryParameters, $r1, $r22, $r24, $r27,
$r29, $r35;
java.io.File dir, $r5;
com.oreilly.servlet.multipart.MultipartParser parser, $r16;
java.util.Enumeration queryParameterNames;
java.lang.Object paramName, $r19, $r25;
java.lang.String[] values;
java.util.Vector newValues, existingValues, $r20, $r26;
bottom_type l8;
com.oreilly.servlet.multipart.ParamPart paramPart;
com.oreilly.servlet.multipart.FilePart filePart;
com.oreilly.servlet.multipart.Part part, $r38;
java.lang.IllegalArgumentException $r2, $r3, $r4, $r6, $r11;
boolean $z0, $z1, $z3, $z4, $z5;
java.lang.StringBuffer $r7, $r8, $r9, $r12, $r13, $r14;
com.oreilly.servlet.UploadedFile $r30, $r36;
this := @this: com.oreilly.servlet.MultipartRequest;
request := @parameter0: javax.servlet.http.HttpServletRequest;
saveDirectory := @parameter1: java.lang.String;
maxPostSize := @parameter2: int;
encoding := @parameter3: java.lang.String;
policy := @parameter4:
com.oreilly.servlet.multipart.FileRenamePolicy;
specialinvoke this.<java.lang.Object: void <init>()>();
$r0 = new java.util.Hashtable;
specialinvoke $r0.<java.util.Hashtable: void <init>()>();
this.<com.oreilly.servlet.MultipartRequest: java.util.Hashtable
parameters> = $r0;
$r1 = new java.util.Hashtable;
specialinvoke $r1.<java.util.Hashtable: void <init>()>();
this.<com.oreilly.servlet.MultipartRequest: java.util.Hashtable
files> = $r1;
if request != null goto label0;
$r2 = new java.lang.IllegalArgumentException;
specialinvoke $r2.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("request cannot be null");
throw $r2;
label0:
if saveDirectory != null goto label1;
$r3 = new java.lang.IllegalArgumentException;
specialinvoke $r3.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("saveDirectory cannot be null");
throw $r3;
label1:
if maxPostSize > 0 goto label2;
$r4 = new java.lang.IllegalArgumentException;
specialinvoke $r4.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>("maxPostSize must be positive");
throw $r4;
label2:
$r5 = new java.io.File;
specialinvoke $r5.<java.io.File: void
<init>(java.lang.String)>(saveDirectory);
dir = $r5;
$z0 = virtualinvoke dir.<java.io.File: boolean isDirectory()>();
if $z0 != 0 goto label3;
$r6 = new java.lang.IllegalArgumentException;
$r7 = new java.lang.StringBuffer;
specialinvoke $r7.<java.lang.StringBuffer: void <init>()>();
$r8 = virtualinvoke $r7.<java.lang.StringBuffer:
java.lang.StringBuffer append(java.lang.String)>("Not a directory: ");
$r9 = virtualinvoke $r8.<java.lang.StringBuffer:
java.lang.StringBuffer append(java.lang.String)>(saveDirectory);
$r10 = virtualinvoke $r9.<java.lang.StringBuffer:
java.lang.String toString()>();
specialinvoke $r6.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>($r10);
throw $r6;
label3:
$z1 = virtualinvoke dir.<java.io.File: boolean canWrite()>();
if $z1 != 0 goto label4;
$r11 = new java.lang.IllegalArgumentException;
$r12 = new java.lang.StringBuffer;
specialinvoke $r12.<java.lang.StringBuffer: void <init>()>();
$r13 = virtualinvoke $r12.<java.lang.StringBuffer:
java.lang.StringBuffer append(java.lang.String)>("Not writable: ");
$r14 = virtualinvoke $r13.<java.lang.StringBuffer:
java.lang.StringBuffer append(java.lang.String)>(saveDirectory);
$r15 = virtualinvoke $r14.<java.lang.StringBuffer:
java.lang.String toString()>();
specialinvoke $r11.<java.lang.IllegalArgumentException: void
<init>(java.lang.String)>($r15);
throw $r11;
label4:
$r16 = new com.oreilly.servlet.multipart.MultipartParser;
specialinvoke
$r16.<com.oreilly.servlet.multipart.MultipartParser: void
<init>(javax.servlet.http.HttpServletRequest,int,boolean,boolean,java.lang.String)>(request,
maxPostSize, 1, 1, encoding);
parser = $r16;
$r17 = interfaceinvoke
request.<javax.servlet.http.HttpServletRequest: java.lang.String
getQueryString()>();
if $r17 == null goto label13;
$r18 = interfaceinvoke
request.<javax.servlet.http.HttpServletRequest: java.lang.String
getQueryString()>();
queryParameters = staticinvoke <javax.servlet.http.HttpUtils:
java.util.Hashtable parseQueryString(java.lang.String)>($r18);
queryParameterNames = virtualinvoke
queryParameters.<java.util.Hashtable: java.util.Enumeration keys()>();
goto label8;
label5:
paramName = interfaceinvoke
queryParameterNames.<java.util.Enumeration: java.lang.Object
nextElement()>();
$r19 = virtualinvoke queryParameters.<java.util.Hashtable:
java.lang.Object get(java.lang.Object)>(paramName);
values = (java.lang.String[]) $r19;
$r20 = new java.util.Vector;
specialinvoke $r20.<java.util.Vector: void <init>()>();
newValues = $r20;
i = 0;
goto label7;
label6:
$r21 = values[i];
virtualinvoke newValues.<java.util.Vector: boolean
add(java.lang.Object)>($r21);
i = i + 1;
label7:
$i0 = lengthof values;
if i < $i0 goto label6;
$r22 = this.<com.oreilly.servlet.MultipartRequest:
java.util.Hashtable parameters>;
virtualinvoke $r22.<java.util.Hashtable: java.lang.Object
put(java.lang.Object,java.lang.Object)>(paramName, newValues);
label8:
$z3 = interfaceinvoke
queryParameterNames.<java.util.Enumeration: boolean hasMoreElements()>();
if $z3 != 0 goto label5;
goto label13;
label9:
name = virtualinvoke l8.<com.oreilly.servlet.multipart.Part:
java.lang.String getName()>();
$z4 = virtualinvoke l8.<com.oreilly.servlet.multipart.Part:
boolean isParam()>();
if $z4 == 0 goto label11;
paramPart = (com.oreilly.servlet.multipart.ParamPart) l8;
value = virtualinvoke
paramPart.<com.oreilly.servlet.multipart.ParamPart: java.lang.String
getStringValue()>();
$r24 = this.<com.oreilly.servlet.MultipartRequest:
java.util.Hashtable parameters>;
$r25 = virtualinvoke $r24.<java.util.Hashtable: java.lang.Object
get(java.lang.Object)>(name);
existingValues = (java.util.Vector) $r25;
if existingValues != null goto label10;
$r26 = new java.util.Vector;
specialinvoke $r26.<java.util.Vector: void <init>()>();
existingValues = $r26;
$r27 = this.<com.oreilly.servlet.MultipartRequest:
java.util.Hashtable parameters>;
virtualinvoke $r27.<java.util.Hashtable: java.lang.Object
put(java.lang.Object,java.lang.Object)>(name, existingValues);
label10:
virtualinvoke existingValues.<java.util.Vector: void
addElement(java.lang.Object)>(value);
goto label13;
label11:
$z5 = virtualinvoke l8.<com.oreilly.servlet.multipart.Part:
boolean isFile()>();
if $z5 == 0 goto label13;
filePart = (com.oreilly.servlet.multipart.FilePart) l8;
fileName = virtualinvoke
filePart.<com.oreilly.servlet.multipart.FilePart: java.lang.String
getFileName()>();
if fileName == null goto label12;
virtualinvoke filePart.<com.oreilly.servlet.multipart.FilePart:
void
setRenamePolicy(com.oreilly.servlet.multipart.FileRenamePolicy)>(policy);
virtualinvoke filePart.<com.oreilly.servlet.multipart.FilePart:
long writeTo(java.io.File)>(dir);
$r29 = this.<com.oreilly.servlet.MultipartRequest:
java.util.Hashtable files>;
$r30 = new com.oreilly.servlet.UploadedFile;
$r31 = virtualinvoke dir.<java.io.File: java.lang.String
toString()>();
$r32 = virtualinvoke
filePart.<com.oreilly.servlet.multipart.FilePart: java.lang.String
getFileName()>();
$r33 = virtualinvoke
filePart.<com.oreilly.servlet.multipart.FilePart: java.lang.String
getContentType()>();
specialinvoke $r30.<com.oreilly.servlet.UploadedFile: void
<init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String)>($r31,
$r32, fileName, $r33);
virtualinvoke $r29.<java.util.Hashtable: java.lang.Object
put(java.lang.Object,java.lang.Object)>(name, $r30);
goto label13;
label12:
$r35 = this.<com.oreilly.servlet.MultipartRequest:
java.util.Hashtable files>;
$r36 = new com.oreilly.servlet.UploadedFile;
specialinvoke $r36.<com.oreilly.servlet.UploadedFile: void
<init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String)>(null,
null, null, null);
virtualinvoke $r35.<java.util.Hashtable: java.lang.Object
put(java.lang.Object,java.lang.Object)>(name, $r36);
label13:
$r38 = virtualinvoke
parser.<com.oreilly.servlet.multipart.MultipartParser:
com.oreilly.servlet.multipart.Part readNextPart()>();
part = $r38;
if $r38 != null goto label9;
return;
}
The source code is here:
http://www.jarvana.com/jarvana/view/com/servlets/cos/05Nov2002/cos-05Nov2002-sources.jar!/com/oreilly/servlet/MultipartRequest.java?format=ok
Got any clue how to fix that?
P.S. I am loading it from the pre-compiled jar file - so this is not a
bug in the java source front-end.
Marc-André Laverdière-Papineau
Doctorant - PhD Candidate
On 14/06/13 11:17 PM, Saswat Anand wrote:
> You can print out the method name and entire jimple body inside the
> buildNormal method, which appears in the stack trace. The last method
> to be printed before the exception is the offending method.
>
>
> On Fri, Jun 14, 2013 at 5:59 PM, Marc-André Laverdière
> <marc-andre.laverdiere-papineau at polymtl.ca> wrote:
>> Hi,
>>
>> Would you please let me know how I can get the offending method? This is sort of black box...
>> --
>> Marc-André Laverdière
>> PhD Candidate - Doctorant
>> Sent from a mobile device - please excuse the brevity
>>
>> Saswat Anand <saswat78 at gmail.com> wrote:
>> >From the stack trace, it looks like one of the local has a "bottom"
>>> type. One possible cause is that the type assigner is failing to
>>> assign correct types to locals in the Jimple code that Dexpler
>>> produces.
>>>
>>> If you could open a new issue with the jimple and .smali code for the
>>> offending method, that would help in debugging.
>>>
>>> Saswat
>>>
>>>
>>> On Fri, Jun 14, 2013 at 1:28 PM, Marc-André Laverdière-Papineau
>>> <marc-andre.laverdiere-papineau at polymtl.ca> wrote:
>>>> Hello everyone,
>>>>
>>>> I am using Flowdroid and was able to do some analyses this week. But
>>>> after some fiddling (mostly improving the sources and sinks), I end
>>> up
>>>> getting this error.
>>>>
>>>> Exception in thread "main" java.lang.RuntimeException: Attempt to
>>> create
>>>> VarNode of type bottom_type
>>>> at soot.jimple.spark.pag.VarNode.<init>(VarNode.java:106)
>>>> at
>>> soot.jimple.spark.pag.LocalVarNode.<init>(LocalVarNode.java:44)
>>>> at soot.jimple.spark.pag.PAG.makeLocalVarNode(PAG.java:539)
>>>> at
>>>>
>>> soot.jimple.spark.builder.MethodNodeFactory.caseLocal(MethodNodeFactory.java:219)
>>>> at
>>> soot.jimple.internal.JimpleLocal.apply(JimpleLocal.java:132)
>>>> at
>>>>
>>> soot.jimple.spark.builder.MethodNodeFactory.caseCastExpr(MethodNodeFactory.java:190)
>>>> at
>>> soot.jimple.internal.AbstractCastExpr.apply(AbstractCastExpr.java:127)
>>>> at
>>>>
>>> soot.jimple.spark.builder.MethodNodeFactory$1.caseAssignStmt(MethodNodeFactory.java:78)
>>>> at
>>> soot.jimple.internal.JAssignStmt.apply(JAssignStmt.java:221)
>>>> at
>>>>
>>> soot.jimple.spark.builder.MethodNodeFactory.handleStmt(MethodNodeFactory.java:69)
>>>> at
>>> soot.jimple.spark.pag.MethodPAG.buildNormal(MethodPAG.java:181)
>>>> at soot.jimple.spark.pag.MethodPAG.build(MethodPAG.java:147)
>>>> at
>>>>
>>> soot.jimple.spark.solver.OnFlyCallGraph.processReachables(OnFlyCallGraph.java:64)
>>>> at
>>> soot.jimple.spark.solver.OnFlyCallGraph.build(OnFlyCallGraph.java:56)
>>>> at
>>>>
>>> soot.jimple.spark.solver.PropWorklist.handleVarNode(PropWorklist.java:123)
>>>> at
>>> soot.jimple.spark.solver.PropWorklist.propagate(PropWorklist.java:53)
>>>> at
>>>>
>>> soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:152)
>>>>
>>>> I really have no idea what is causing this and what I can do about
>>> it.
>>>> Any suggestions?
>>>>
>>>> --
>>>> 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
>>
>
More information about the Soot-list
mailing list