Skip to content

Commit bf3dbc2

Browse files
committed
Java: Add support for flow through side-effects on static fields.
1 parent 619913b commit bf3dbc2

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@ private predicate fieldStep(Node node1, Node node2) {
4040
exists(Field f |
4141
// Taint fields through assigned values only if they're static
4242
f.isStatic() and
43-
f.getAnAssignedValue() = node1.asExpr() and
4443
node2.(FieldValueNode).getField() = f
44+
|
45+
f.getAnAssignedValue() = node1.asExpr()
46+
or
47+
f.getAnAccess() = node1.(PostUpdateNode).getPreUpdateNode().asExpr()
4548
)
4649
or
4750
exists(Field f, FieldRead fr |
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
public class G {
2+
static Object[] f;
3+
4+
void sink(Object o) { }
5+
6+
void runsink() {
7+
sink(f[0]);
8+
}
9+
10+
void test1() {
11+
f[0] = new Object();
12+
}
13+
14+
void test2() {
15+
addObj(f);
16+
}
17+
18+
void addObj(Object[] xs) {
19+
xs[0] = new Object();
20+
}
21+
}

java/ql/test/library-tests/dataflow/fields/flow.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@
2929
| F.java:5:14:5:25 | new Object(...) | F.java:20:10:20:17 | f.Field1 |
3030
| F.java:10:16:10:27 | new Object(...) | F.java:15:10:15:17 | f.Field1 |
3131
| F.java:24:9:24:20 | new Object(...) | F.java:33:10:33:17 | f.Field1 |
32+
| G.java:11:12:11:23 | new Object(...) | G.java:7:10:7:13 | ...[...] |
33+
| G.java:19:13:19:24 | new Object(...) | G.java:7:10:7:13 | ...[...] |

0 commit comments

Comments
 (0)