Skip to content

Commit 5b5f9ad

Browse files
committed
C#: Add missing CFG edge from generic catch block to finally block
1 parent bd075a7 commit 5b5f9ad

File tree

3 files changed

+8
-9
lines changed

3 files changed

+8
-9
lines changed

csharp/ql/src/semmle/code/csharp/controlflow/ControlFlowGraph.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,9 +1710,9 @@ module ControlFlow {
17101710
exists(getAThrownException(ts, cfe, c)) and
17111711
result = first(ts.getCatchClause(0))
17121712
or
1713-
exists(SpecificCatchClause scc, int i | scc = ts.getCatchClause(i) |
1714-
cfe = scc and
1715-
scc = last(ts.getCatchClause(i), c) and
1713+
exists(CatchClause cc, int i | cc = ts.getCatchClause(i) |
1714+
cfe = cc and
1715+
cc = last(ts.getCatchClause(i), c) and
17161716
(
17171717
// Flow from one `catch` clause to the next
17181718
result = first(ts.getCatchClause(i + 1)) and
@@ -1725,7 +1725,7 @@ module ControlFlow {
17251725
)
17261726
or
17271727
cfe = last(ts.getCatchClause(i), c) and
1728-
cfe = last(scc.getFilterClause(), _) and
1728+
cfe = last(cc.getFilterClause(), _) and
17291729
(
17301730
// Flow from last element of `catch` clause filter to next `catch` clause
17311731
result = first(ts.getCatchClause(i + 1)) and
@@ -1739,7 +1739,7 @@ module ControlFlow {
17391739
)
17401740
or
17411741
// Flow from last element of a `catch` block to first element of `finally` block
1742-
cfe = lastCatchClauseBlock(scc, c) and
1742+
cfe = lastCatchClauseBlock(cc, c) and
17431743
result = first(ts.getFinally())
17441744
)
17451745
or

csharp/ql/test/library-tests/controlflow/graph/Dominance.expected

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,7 +1625,6 @@ dominance
16251625
| Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... |
16261626
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:219:9:221:9 | {...} |
16271627
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:37 | ...; |
1628-
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} |
16291628
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" |
16301629
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:36 | call to method WriteLine |
16311630
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:222:9:225:9 | catch {...} |
@@ -4538,14 +4537,14 @@ postDominance
45384537
| Finally.cs:217:5:231:5 | {...} | Finally.cs:216:10:216:12 | enter M11 |
45394538
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:217:5:231:5 | {...} |
45404539
| Finally.cs:219:9:221:9 | {...} | Finally.cs:218:9:229:9 | try {...} ... |
4541-
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:31:220:35 | "Try" |
45424540
| Finally.cs:220:13:220:37 | ...; | Finally.cs:219:9:221:9 | {...} |
45434541
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:37 | ...; |
45444542
| Finally.cs:223:9:225:9 | {...} | Finally.cs:222:9:225:9 | catch {...} |
45454543
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:224:31:224:37 | "Catch" |
45464544
| Finally.cs:224:13:224:39 | ...; | Finally.cs:223:9:225:9 | {...} |
45474545
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:13:224:39 | ...; |
45484546
| Finally.cs:227:9:229:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine |
4547+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:224:13:224:38 | call to method WriteLine |
45494548
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:228:31:228:39 | "Finally" |
45504549
| Finally.cs:228:13:228:41 | ...; | Finally.cs:227:9:229:9 | {...} |
45514550
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:13:228:41 | ...; |
@@ -6985,7 +6984,6 @@ blockDominance
69856984
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:222:9:225:9 | catch {...} |
69866985
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:227:9:229:9 | {...} |
69876986
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine |
6988-
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} |
69896987
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} |
69906988
| Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} |
69916989
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
@@ -8793,11 +8791,11 @@ postBlockDominance
87938791
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; |
87948792
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; |
87958793
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 |
8796-
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:216:10:216:12 | enter M11 |
87978794
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine |
87988795
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} |
87998796
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | enter M11 |
88008797
| Finally.cs:227:9:229:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine |
8798+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:222:9:225:9 | catch {...} |
88018799
| Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} |
88028800
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
88038801
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | enter M1 |

csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,7 @@
18291829
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:222:9:225:9 | catch {...} | semmle.label | exception(OutOfMemoryException) |
18301830
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:223:9:225:9 | {...} | semmle.label | successor |
18311831
| Finally.cs:223:9:225:9 | {...} | Finally.cs:224:13:224:39 | ...; | semmle.label | successor |
1832+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} | semmle.label | successor |
18321833
| Finally.cs:224:13:224:39 | ...; | Finally.cs:224:31:224:37 | "Catch" | semmle.label | successor |
18331834
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:13:224:38 | call to method WriteLine | semmle.label | successor |
18341835
| Finally.cs:227:9:229:9 | {...} | Finally.cs:228:13:228:41 | ...; | semmle.label | successor |

0 commit comments

Comments
 (0)