- Notifications
You must be signed in to change notification settings - Fork 310
Open
Description
Please consider the following code:
List myList = new ArrayList<String>(); myList.add(source()); sink(myList); // Reported by FlowDroid try{System.out.println("");}catch(Exception ex){} // If removed, FlowDroid correctly reports the sink in the next statement sink(myList); // Not reported by FlowDroid List unused = new ArrayList<Boolean>(); // If removed, FlowDroid correctly reports the sink in the previous statement
As annotated, FlowDroid doesn't report the second sink. This seems to be related to the try-catch block before it and the variable declaration after it: if we remove one of them, the leak is correctly reported.
I'm using a rather new version of FlowDroid (02dba8a).
This only happens using --aliasalgo NONE
or --aliasalgo LAZY
, with --aliasalgo FLOWSENSITIVE
both sinks are found.
I call FlowDroid via the command line
java -jar ./soot-infoflow-cmd-02dba8a-jar-with-dependencies.jar \ -a {path-to-apk} \ -s ./SourcesAndSinks.xml \ -o ./out.xml \ -p {path-to-android-platforms-folder} \ --aliasalgo NONE \ --mergedexfiles
SourcesAndSinks.xml
<sinkSources> <category id="NO_CATEGORY" description="no_category"> <method signature="com.example.testapp.MainActivity: java.lang.String source()"> <return type="java.lang.String"> <accessPath isSource="true" isSink="false"> </accessPath> </return> </method> <method signature="com.example.testapp.MainActivity: void sink(java.util.List)"> <param index="0" type="java.util.List"> <accessPath isSource="false" isSink="true"/> </param> </method> </category> </sinkSources>
Metadata
Metadata
Assignees
Labels
No labels