Merge pull request #15507 from asgerf/shared/outbarrier-bugfix

Shared: fix a bug in stateful outbarriers
This commit is contained in:
Asger F
2024-02-12 21:44:49 +01:00
committed by GitHub
4 changed files with 41 additions and 20 deletions

View File

@@ -1,10 +1,17 @@
class A {
static String fsrc = "";
String fsink = "";
String src(String s) { return s; }
void sink(String s) { }
static String flowThroughSink(String s) {
A obj = new A();
obj.fsink = s;
return obj.fsink;
}
void foo() {
String s = fsrc;
sink(fsrc);
@@ -13,5 +20,9 @@ class A {
sink(s);
sink(s);
s = fsrc;
s = flowThroughSink(s);
sink(s);
}
}

View File

@@ -1,7 +1,9 @@
inconsistentFlow
#select
| A.java:9:16:9:19 | fsrc | A.java:13:10:13:10 | s | nobarrier, sinkbarrier |
| A.java:9:16:9:19 | fsrc | A.java:15:10:15:10 | s | nobarrier |
| A.java:10:10:10:13 | fsrc | A.java:10:10:10:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier |
| A.java:12:9:12:14 | src(...) | A.java:13:10:13:10 | s | both, nobarrier, sinkbarrier, srcbarrier |
| A.java:12:9:12:14 | src(...) | A.java:15:10:15:10 | s | nobarrier, srcbarrier |
| A.java:16:16:16:19 | fsrc | A.java:20:10:20:10 | s | nobarrier, sinkbarrier |
| A.java:16:16:16:19 | fsrc | A.java:22:10:22:10 | s | nobarrier |
| A.java:17:10:17:13 | fsrc | A.java:17:10:17:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier |
| A.java:19:9:19:14 | src(...) | A.java:20:10:20:10 | s | both, nobarrier, sinkbarrier, srcbarrier |
| A.java:19:9:19:14 | src(...) | A.java:22:10:22:10 | s | nobarrier, srcbarrier |
| A.java:24:9:24:12 | fsrc | A.java:11:17:11:17 | s | both, nobarrier, sinkbarrier, srcbarrier |
| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | nobarrier, srcbarrier |

View File

@@ -12,6 +12,11 @@ predicate sink0(Node n) {
sink.getMethod().hasName("sink") and
sink.getAnArgument() = n.asExpr()
)
or
exists(AssignExpr assign |
assign.getDest().(FieldAccess).getField().hasName("fsink") and
n.asExpr() = assign.getSource()
)
}
module Conf1 implements ConfigSig {