Skip to content

Commit cb717a2

Browse files
joefarebrotheratorralba
authored andcommitted
Fix failing test cases
1 parent 810854d commit cb717a2

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/** Provides definitions for working with uses of Android external storage */
22

33
import java
4-
import semmle.code.java.dataflow.DataFlow
4+
private import semmle.code.java.dataflow.DataFlow
55
private import semmle.code.java.dataflow.ExternalFlow
66

77
private class ExternalStorageDirSourceModel extends SourceModelCsv {
@@ -10,11 +10,11 @@ private class ExternalStorageDirSourceModel extends SourceModelCsv {
1010
[
1111
//"package;type;overrides;name;signature;ext;spec;kind"
1212
"android.content;Context;true;getExternalFilesDir;(String);;ReturnValue;android-external-storage-dir",
13-
"android.content;Context;true;getExternalFilesDirs;(String);;ReturnValue.ArrayElement;android-external-storage-dir",
14-
"android.content;Context;true;getExternalCachesDir;(String);;ReturnValue;android-external-storage-dir",
15-
"android.content;Context;true;getExternalCachesDirs;(String);;ReturnValue.ArrayElement;android-external-storage-dir",
16-
"android.os;Environment;false;getExternalStorageDirectory;(String);;ReturnValue.ArrayElement;android-external-storage-dir",
17-
"android.os;Environment;false;getExternalStoragePublicDirectory;(String);;ReturnValue.ArrayElement;android-external-storage-dir",
13+
"android.content;Context;true;getExternalFilesDirs;(String);;ReturnValue;android-external-storage-dir",
14+
"android.content;Context;true;getExternalCacheDir;();;ReturnValue;android-external-storage-dir",
15+
"android.content;Context;true;getExternalCacheDirs;();;ReturnValue;android-external-storage-dir",
16+
"android.os;Environment;false;getExternalStorageDirectory;();;ReturnValue;android-external-storage-dir",
17+
"android.os;Environment;false;getExternalStoragePublicDirectory;(String);;ReturnValue;android-external-storage-dir",
1818
]
1919
}
2020
}
@@ -23,9 +23,13 @@ private predicate externalStorageFlowStep(DataFlow::Node node1, DataFlow::Node n
2323
DataFlow::localFlowStep(node1, node2)
2424
or
2525
exists(ConstructorCall c | c.getConstructedType() instanceof TypeFile |
26-
node1.asExpr() = c.getArgument(1) and
26+
node1.asExpr() = c.getArgument(0) and
2727
node2.asExpr() = c
2828
)
29+
or
30+
node2.asExpr().(ArrayAccess).getArray() = node1.asExpr()
31+
or
32+
node2.asExpr().(FieldRead).getField().getInitializer() = node1.asExpr()
2933
}
3034

3135
private predicate externalStorageFlow(DataFlow::Node node1, DataFlow::Node node2) {

java/ql/test/library-tests/frameworks/android/external-storage/Test.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,39 +13,39 @@ void test1(Context ctx) throws IOException {
1313
InputStream is = new FileInputStream(f);
1414
byte[] data = new byte[is.available()];
1515
is.read(data);
16-
sink(data); // $hasTaintFlow
16+
sink(data); // $ hasTaintFlow
1717
is.close();
1818
}
1919

2020
void test2(Context ctx) throws IOException {
2121
File f = new File(new File(new File(ctx.getExternalFilesDirs(null)[0], "things"), "stuff"), "file.txt");
22-
sink(new FileInputStream(f)); // $hasTaintFlow
22+
sink(new FileInputStream(f)); // $ hasTaintFlow
2323
}
2424

2525
void test3(Context ctx) throws IOException {
2626
File f = new File(ctx.getExternalCacheDir(), "file.txt");
27-
sink(new FileInputStream(f)); // $hasTaintFlow
27+
sink(new FileInputStream(f)); // $ hasTaintFlow
2828
}
2929

3030
void test4(Context ctx) throws IOException {
3131
File f = new File(ctx.getExternalCacheDirs()[0], "file.txt");
32-
sink(new FileInputStream(f)); // $hasTaintFlow
32+
sink(new FileInputStream(f)); // $ hasTaintFlow
3333
}
3434

3535
void test5(Context ctx) throws IOException {
3636
File f = new File(Environment.getExternalStorageDirectory(), "file.txt");
37-
sink(new FileInputStream(f)); // $hasTaintFlow
37+
sink(new FileInputStream(f)); // $ hasTaintFlow
3838
}
3939

4040
void test6(Context ctx) throws IOException {
4141
File f = new File(Environment.getExternalStoragePublicDirectory(null), "file.txt");
42-
sink(new FileInputStream(f)); // $hasTaintFlow
42+
sink(new FileInputStream(f)); // $ hasTaintFlow
4343
}
4444

4545
static final File dir = Environment.getExternalStorageDirectory();
4646

4747
void test7(Context ctx) throws IOException {
4848
File f = new File(dir, "file.txt");
49-
sink(new FileInputStream(f)); // $hasTaintFlow
49+
sink(new FileInputStream(f)); // $ hasTaintFlow
5050
}
5151
}

0 commit comments

Comments
 (0)