Skip to content

Commit ddbacc3

Browse files
committed
Shared: add test case for stateful outBarrier bug
1 parent 2333b8d commit ddbacc3

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

java/ql/test/library-tests/dataflow/inoutbarriers/A.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
class A {
22
static String fsrc = "";
3+
String fsink = "";
34

45
String src(String s) { return s; }
56

67
void sink(String s) { }
78

9+
static String flowThroughSink(String s) {
10+
A obj = new A();
11+
obj.fsink = s;
12+
return obj.fsink;
13+
}
14+
815
void foo() {
916
String s = fsrc;
1017
sink(fsrc);
@@ -13,5 +20,9 @@ void foo() {
1320
sink(s);
1421

1522
sink(s);
23+
24+
s = fsrc;
25+
s = flowThroughSink(s);
26+
sink(s);
1627
}
1728
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
inconsistentFlow
2+
| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration both |
3+
| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration sinkbarrier |
24
#select
3-
| A.java:9:16:9:19 | fsrc | A.java:13:10:13:10 | s | nobarrier, sinkbarrier |
4-
| A.java:9:16:9:19 | fsrc | A.java:15:10:15:10 | s | nobarrier |
5-
| A.java:10:10:10:13 | fsrc | A.java:10:10:10:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier |
6-
| A.java:12:9:12:14 | src(...) | A.java:13:10:13:10 | s | both, nobarrier, sinkbarrier, srcbarrier |
7-
| A.java:12:9:12:14 | src(...) | A.java:15:10:15:10 | s | nobarrier, srcbarrier |
5+
| A.java:16:16:16:19 | fsrc | A.java:20:10:20:10 | s | nobarrier, sinkbarrier |
6+
| A.java:16:16:16:19 | fsrc | A.java:22:10:22:10 | s | nobarrier |
7+
| A.java:17:10:17:13 | fsrc | A.java:17:10:17:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier |
8+
| A.java:19:9:19:14 | src(...) | A.java:20:10:20:10 | s | both, nobarrier, sinkbarrier, srcbarrier |
9+
| A.java:19:9:19:14 | src(...) | A.java:22:10:22:10 | s | nobarrier, srcbarrier |
10+
| A.java:24:9:24:12 | fsrc | A.java:11:17:11:17 | s | both, nobarrier, sinkbarrier, srcbarrier |
11+
| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | nobarrier, srcbarrier |

java/ql/test/library-tests/dataflow/inoutbarriers/test.ql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ predicate sink0(Node n) {
1212
sink.getMethod().hasName("sink") and
1313
sink.getAnArgument() = n.asExpr()
1414
)
15+
or
16+
exists(AssignExpr assign |
17+
assign.getDest().(FieldAccess).getField().hasName("fsink") and
18+
n.asExpr() = assign.getSource()
19+
)
1520
}
1621

1722
module Conf1 implements ConfigSig {

0 commit comments

Comments
 (0)