Skip to content

Commit 4089c41

Browse files
committed
Java: Accept revised CFG.
1 parent 38c1472 commit 4089c41

File tree

7 files changed

+131
-80
lines changed

7 files changed

+131
-80
lines changed

java/ql/lib/utils/test/AstCfg.qll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
overlay[local?]
2+
module;
3+
4+
import java
5+
6+
predicate isAstNode(ControlFlowNode n) {
7+
n.injects(_) or
8+
n instanceof ControlFlow::EntryNode or
9+
n instanceof ControlFlow::AnnotatedExitNode or
10+
n instanceof ControlFlow::ExitNode
11+
}
12+
13+
predicate succToAst(ControlFlowNode n1, ControlFlowNode n2) {
14+
n2 = n1.getASuccessor() and
15+
isAstNode(n2)
16+
or
17+
exists(ControlFlowNode mid |
18+
mid = n1.getASuccessor() and
19+
not isAstNode(mid) and
20+
succToAst(mid, n2)
21+
)
22+
}
23+
24+
ControlFlowNode getAnAstSuccessor(ControlFlowNode n) { isAstNode(n) and succToAst(n, result) }

java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.expected

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
| MultiCatch.java:6:14:6:23 | Entry | MultiCatch.java:6:14:6:23 | { ... } |
2+
| MultiCatch.java:6:14:6:23 | Normal Exit | MultiCatch.java:6:14:6:23 | Exit |
13
| MultiCatch.java:6:14:6:23 | super(...) | MultiCatch.java:6:14:6:23 | Normal Exit |
24
| MultiCatch.java:6:14:6:23 | { ... } | MultiCatch.java:6:14:6:23 | super(...) |
5+
| MultiCatch.java:7:14:7:23 | Entry | MultiCatch.java:8:2:20:2 | { ... } |
6+
| MultiCatch.java:7:14:7:23 | Exceptional Exit | MultiCatch.java:7:14:7:23 | Exit |
37
| MultiCatch.java:8:2:20:2 | { ... } | MultiCatch.java:9:3:19:3 | try ... |
48
| MultiCatch.java:9:3:19:3 | try ... | MultiCatch.java:10:3:15:3 | { ... } |
59
| MultiCatch.java:10:3:15:3 | { ... } | MultiCatch.java:11:4:11:8 | if (...) |
@@ -10,6 +14,7 @@
1014
| MultiCatch.java:12:11:12:27 | new IOException(...) | MultiCatch.java:12:5:12:28 | throw ... |
1115
| MultiCatch.java:14:5:14:29 | throw ... | MultiCatch.java:15:5:15:37 | catch (...) |
1216
| MultiCatch.java:14:11:14:28 | new SQLException(...) | MultiCatch.java:14:5:14:29 | throw ... |
17+
| MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:7:14:7:23 | Exceptional Exit |
1318
| MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:15:36:15:36 | e |
1419
| MultiCatch.java:15:36:15:36 | e | MultiCatch.java:16:3:19:3 | { ... } |
1520
| MultiCatch.java:16:3:19:3 | { ... } | MultiCatch.java:17:4:17:23 | <Expr>; |
@@ -18,6 +23,9 @@
1823
| MultiCatch.java:17:4:17:23 | <Expr>; | MultiCatch.java:17:4:17:4 | e |
1924
| MultiCatch.java:18:4:18:11 | throw ... | MultiCatch.java:7:14:7:23 | Exceptional Exit |
2025
| MultiCatch.java:18:10:18:10 | e | MultiCatch.java:18:4:18:11 | throw ... |
26+
| MultiCatch.java:22:14:22:24 | Entry | MultiCatch.java:23:2:33:2 | { ... } |
27+
| MultiCatch.java:22:14:22:24 | Exceptional Exit | MultiCatch.java:22:14:22:24 | Exit |
28+
| MultiCatch.java:22:14:22:24 | Normal Exit | MultiCatch.java:22:14:22:24 | Exit |
2129
| MultiCatch.java:23:2:33:2 | { ... } | MultiCatch.java:24:3:32:4 | try ... |
2230
| MultiCatch.java:24:3:32:4 | try ... | MultiCatch.java:25:3:31:3 | { ... } |
2331
| MultiCatch.java:25:3:31:3 | { ... } | MultiCatch.java:26:4:26:8 | if (...) |
@@ -31,12 +39,14 @@
3139
| MultiCatch.java:28:12:28:12 | c | MultiCatch.java:30:10:30:24 | new Exception(...) |
3240
| MultiCatch.java:29:5:29:29 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) |
3341
| MultiCatch.java:29:11:29:28 | new SQLException(...) | MultiCatch.java:29:5:29:29 | throw ... |
34-
| MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:22:14:22:24 | Exceptional Exit |
3542
| MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) |
3643
| MultiCatch.java:30:10:30:24 | new Exception(...) | MultiCatch.java:30:4:30:25 | throw ... |
44+
| MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:22:14:22:24 | Exceptional Exit |
3745
| MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:31:36:31:36 | e |
3846
| MultiCatch.java:31:36:31:36 | e | MultiCatch.java:32:3:32:4 | { ... } |
3947
| MultiCatch.java:32:3:32:4 | { ... } | MultiCatch.java:22:14:22:24 | Normal Exit |
48+
| MultiCatch.java:35:14:35:26 | Entry | MultiCatch.java:36:2:42:2 | { ... } |
49+
| MultiCatch.java:35:14:35:26 | Normal Exit | MultiCatch.java:35:14:35:26 | Exit |
4050
| MultiCatch.java:36:2:42:2 | { ... } | MultiCatch.java:37:3:41:4 | try ... |
4151
| MultiCatch.java:37:3:41:4 | try ... | MultiCatch.java:38:3:40:3 | { ... } |
4252
| MultiCatch.java:38:3:40:3 | { ... } | MultiCatch.java:39:10:39:26 | new IOException(...) |
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import default
2+
import utils.test.AstCfg
23

34
from ControlFlowNode n
45
where n.getEnclosingCallable().getCompilationUnit().fromSource()
5-
select n, n.getASuccessor()
6+
select n, getAnAstSuccessor(n)

java/ql/test/library-tests/pattern-instanceof/cfg.expected

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
| Test.java:1:14:1:17 | Exceptional Exit | Test.java:1:14:1:17 | Exit |
1+
| Test.java:1:14:1:17 | Entry | Test.java:1:14:1:17 | { ... } |
22
| Test.java:1:14:1:17 | Normal Exit | Test.java:1:14:1:17 | Exit |
33
| Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Normal Exit |
44
| Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) |
5-
| Test.java:3:22:3:25 | Exceptional Exit | Test.java:3:22:3:25 | Exit |
5+
| Test.java:3:22:3:25 | Entry | Test.java:3:40:20:3 | { ... } |
66
| Test.java:3:22:3:25 | Normal Exit | Test.java:3:22:3:25 | Exit |
77
| Test.java:3:40:20:3 | { ... } | Test.java:5:5:5:34 | var ...; |
88
| Test.java:5:5:5:34 | var ...; | Test.java:5:26:5:33 | source(...) |
@@ -50,35 +50,39 @@
5050
| Test.java:17:7:17:26 | sink(...) | Test.java:3:22:3:25 | Normal Exit |
5151
| Test.java:17:7:17:27 | <Expr>; | Test.java:17:12:17:25 | alsoNotTainted |
5252
| Test.java:17:12:17:25 | alsoNotTainted | Test.java:17:7:17:26 | sink(...) |
53-
| Test.java:22:24:22:29 | Exceptional Exit | Test.java:22:24:22:29 | Exit |
53+
| Test.java:22:24:22:29 | Entry | Test.java:22:33:22:53 | { ... } |
5454
| Test.java:22:24:22:29 | Normal Exit | Test.java:22:24:22:29 | Exit |
5555
| Test.java:22:33:22:53 | { ... } | Test.java:22:42:22:50 | "tainted" |
5656
| Test.java:22:35:22:51 | return ... | Test.java:22:24:22:29 | Normal Exit |
5757
| Test.java:22:42:22:50 | "tainted" | Test.java:22:35:22:51 | return ... |
58-
| Test.java:23:22:23:25 | Exceptional Exit | Test.java:23:22:23:25 | Exit |
58+
| Test.java:23:22:23:25 | Entry | Test.java:23:40:23:42 | { ... } |
5959
| Test.java:23:22:23:25 | Normal Exit | Test.java:23:22:23:25 | Exit |
6060
| Test.java:23:40:23:42 | { ... } | Test.java:23:22:23:25 | Normal Exit |
6161
| Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | <Expr>; |
6262
| Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | Normal Exit |
6363
| Test.java:27:8:27:12 | <Expr>; | Test.java:27:8:27:12 | this |
6464
| Test.java:27:8:27:12 | <Expr>; | Test.java:27:8:27:12 | this |
65-
| Test.java:27:8:27:12 | Exceptional Exit | Test.java:27:8:27:12 | Exit |
65+
| Test.java:27:8:27:12 | Entry | Test.java:27:8:27:12 | { ... } |
6666
| Test.java:27:8:27:12 | Normal Exit | Test.java:27:8:27:12 | Exit |
6767
| Test.java:27:8:27:12 | i | Test.java:27:8:27:12 | ...=... |
6868
| Test.java:27:8:27:12 | otherField | Test.java:27:8:27:12 | ...=... |
6969
| Test.java:27:8:27:12 | super(...) | Test.java:27:8:27:12 | <Expr>; |
70-
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | i |
71-
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | otherField |
70+
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.i |
71+
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.otherField |
72+
| Test.java:27:8:27:12 | this.i | Test.java:27:8:27:12 | i |
73+
| Test.java:27:8:27:12 | this.otherField | Test.java:27:8:27:12 | otherField |
7274
| Test.java:27:8:27:12 | { ... } | Test.java:27:8:27:12 | super(...) |
7375
| Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | <Expr>; |
7476
| Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | Normal Exit |
7577
| Test.java:28:8:28:12 | <Expr>; | Test.java:28:8:28:12 | this |
7678
| Test.java:28:8:28:12 | <Expr>; | Test.java:28:8:28:12 | this |
77-
| Test.java:28:8:28:12 | Exceptional Exit | Test.java:28:8:28:12 | Exit |
79+
| Test.java:28:8:28:12 | Entry | Test.java:28:8:28:12 | { ... } |
7880
| Test.java:28:8:28:12 | Normal Exit | Test.java:28:8:28:12 | Exit |
7981
| Test.java:28:8:28:12 | nonTaintedField | Test.java:28:8:28:12 | ...=... |
8082
| Test.java:28:8:28:12 | super(...) | Test.java:28:8:28:12 | <Expr>; |
8183
| Test.java:28:8:28:12 | taintedField | Test.java:28:8:28:12 | ...=... |
82-
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | nonTaintedField |
83-
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | taintedField |
84+
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.nonTaintedField |
85+
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.taintedField |
86+
| Test.java:28:8:28:12 | this.nonTaintedField | Test.java:28:8:28:12 | nonTaintedField |
87+
| Test.java:28:8:28:12 | this.taintedField | Test.java:28:8:28:12 | taintedField |
8488
| Test.java:28:8:28:12 | { ... } | Test.java:28:8:28:12 | super(...) |
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import java
2+
import utils.test.AstCfg
23

34
from ControlFlowNode cn
45
where cn.getLocation().getFile().getBaseName() = "Test.java"
5-
select cn, cn.getASuccessor()
6+
select cn, getAnAstSuccessor(cn)

0 commit comments

Comments
 (0)