Skip to content

Commit 3fe4382

Browse files
yoffCopilot
andcommitted
Shared CFG: check abrupt completion origins
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 1ee9158 commit 3fe4382

7 files changed

Lines changed: 85 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
consistencyOverview
2+
siblingsWithSameIndexInDefaultCfg
3+
deadEnd
4+
nonUniqueEnclosingCallable
5+
nonUniqueInConditionalContext
6+
nonLocalStep
7+
ambiguousAdditionalNode
8+
invalidAbruptCompletionOrigin
9+
missingInNodeForPostOrInOrder
10+
multipleSuccessors
11+
multipleConditionalSuccessorKinds
12+
directAndConditionalSuccessors
13+
selfLoop
14+
bodyPartNonOverlap
15+
parameterNonOverlap
16+
parameterEnclosingCallable
17+
#select
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import csharp
2+
import ControlFlow::Consistency
3+
4+
from int results
5+
where consistencyOverview("invalidAbruptCompletionOrigin", results)
6+
select results
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
consistencyOverview
2+
siblingsWithSameIndexInDefaultCfg
3+
deadEnd
4+
nonUniqueEnclosingCallable
5+
nonUniqueInConditionalContext
6+
nonLocalStep
7+
ambiguousAdditionalNode
8+
invalidAbruptCompletionOrigin
9+
missingInNodeForPostOrInOrder
10+
multipleSuccessors
11+
multipleConditionalSuccessorKinds
12+
directAndConditionalSuccessors
13+
selfLoop
14+
bodyPartNonOverlap
15+
parameterNonOverlap
16+
parameterEnclosingCallable
17+
#select
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import java
2+
import ControlFlow::Consistency
3+
4+
from int results
5+
where consistencyOverview("invalidAbruptCompletionOrigin", results)
6+
select results
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
consistencyOverview
2+
siblingsWithSameIndexInDefaultCfg
3+
deadEnd
4+
nonUniqueEnclosingCallable
5+
nonUniqueInConditionalContext
6+
nonLocalStep
7+
ambiguousAdditionalNode
8+
invalidAbruptCompletionOrigin
9+
missingInNodeForPostOrInOrder
10+
multipleSuccessors
11+
multipleConditionalSuccessorKinds
12+
directAndConditionalSuccessors
13+
selfLoop
14+
bodyPartNonOverlap
15+
parameterNonOverlap
16+
parameterEnclosingCallable
17+
#select
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import semmle.python.controlflow.internal.AstNodeImpl
2+
import ControlFlow::Consistency
3+
4+
from int results
5+
where consistencyOverview("invalidAbruptCompletionOrigin", results)
6+
select results

shared/controlflow/codeql/controlflow/ControlFlowGraph.qll

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2257,6 +2257,12 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
22572257
query = "missingInNodeForPostOrInOrder" and
22582258
results = strictcount(AstNode ast | missingInNodeForPostOrInOrder(ast))
22592259
or
2260+
query = "invalidAbruptCompletionOrigin" and
2261+
results =
2262+
strictcount(AstNode ast, PreControlFlowNode node |
2263+
invalidAbruptCompletionOrigin(ast, node)
2264+
)
2265+
or
22602266
query = "multipleSuccessors" and
22612267
results =
22622268
strictcount(ControlFlowNode node, SuccessorType t, ControlFlowNode successor |
@@ -2341,6 +2347,16 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
23412347
1 < strictcount(NormalSuccessor t | additionalNode(n, tag, t))
23422348
}
23432349

2350+
/**
2351+
* Holds if the language-specific CFG input supplies an abrupt completion for `ast` whose
2352+
* origin `node` does not belong to `ast`.
2353+
*/
2354+
query predicate invalidAbruptCompletionOrigin(AstNode ast, PreControlFlowNode node) {
2355+
Input2::beginAbruptCompletion(ast, node, _, _) and
2356+
not node.isIn(ast) and
2357+
not node.isAdditional(ast, _)
2358+
}
2359+
23442360
/**
23452361
* Holds if the "in" node is unreachable for a post-or-in-order AST node.
23462362
*

0 commit comments

Comments
 (0)