Skip to content

Commit 4ebad01

Browse files
committed
Cfg: Add consistency check for multiple default cases.
1 parent 3a9633b commit 4ebad01

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

shared/controlflow/codeql/controlflow/ControlFlowGraph.qll

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2286,7 +2286,7 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
22862286
multipleConditionalSuccessorKinds(node, t1, t2, succ1, succ2)
22872287
)
22882288
or
2289-
query = "directAndConditionalSuccessor" and
2289+
query = "directAndConditionalSuccessors" and
22902290
results =
22912291
strictcount(ControlFlowNode node, ConditionalSuccessor t1, DirectSuccessor t2,
22922292
ControlFlowNode succ1, ControlFlowNode succ2 |
@@ -2295,6 +2295,19 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
22952295
or
22962296
query = "selfLoop" and
22972297
results = strictcount(ControlFlowNode node, SuccessorType t | selfLoop(node, t))
2298+
or
2299+
query = "bodyPartNonOverlap" and
2300+
results = strictcount(Callable c | bodyPartNonOverlap(c))
2301+
or
2302+
query = "parameterNonOverlap" and
2303+
results = strictcount(Callable c, Parameter p | parameterNonOverlap(c, p))
2304+
or
2305+
query = "parameterEnclosingCallable" and
2306+
results = strictcount(Parameter p, Callable c | parameterEnclosingCallable(p, c))
2307+
or
2308+
query = "multipleDefaultCases" and
2309+
results =
2310+
strictcount(Switch s, int defaultCases | multipleDefaultCases(s, defaultCases))
22982311
}
22992312

23002313
/**
@@ -2495,6 +2508,16 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
24952508
p = callableGetParameter(c, _) and
24962509
not c = getEnclosingCallable(p)
24972510
}
2511+
2512+
/**
2513+
* Holds if a switch `s` has multiple default cases.
2514+
*
2515+
* A well-formed switch statement should have at most one default case.
2516+
*/
2517+
query predicate multipleDefaultCases(Switch s, int defaultCases) {
2518+
defaultCases = strictcount(DefaultCase c | s.getCase(_) = c) and
2519+
defaultCases > 1
2520+
}
24982521
}
24992522
}
25002523
}

0 commit comments

Comments
 (0)