Skip to content

Commit a5279ec

Browse files
committed
Guards: Rank return expressions.
1 parent 0a4406d commit a5279ec

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

shared/controlflow/codeql/controlflow/Guards.qll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,8 @@ module Make<
10081008
* wrappers.
10091009
*/
10101010
private module WrapperGuard {
1011+
private import codeql.util.DenseRank
1012+
10111013
final private class FinalExpr = Expr;
10121014

10131015
class ReturnExpr extends FinalExpr {
@@ -1019,6 +1021,25 @@ module Make<
10191021
BasicBlock getBasicBlock() { result = super.getBasicBlock() }
10201022
}
10211023

1024+
private module DenseRankInput implements DenseRankInputSig1 {
1025+
class C = NonOverridableMethod;
1026+
1027+
class Ranked = ReturnExpr;
1028+
1029+
int getRank(NonOverridableMethod m, ReturnExpr ret) {
1030+
m.getAReturnExpr() = ret and
1031+
result = ret.getLocation().getStartLine()
1032+
}
1033+
}
1034+
1035+
private module ReturnExprRank = DenseRank1<DenseRankInput>;
1036+
1037+
private predicate rankedReturnExpr = ReturnExprRank::denseRank/2;
1038+
1039+
private int maxRank(NonOverridableMethod m) {
1040+
result = max(int rnk | exists(rankedReturnExpr(m, rnk)))
1041+
}
1042+
10221043
private predicate relevantCallValue(NonOverridableMethodCall call, GuardValue val) {
10231044
BranchImplies::guardControls(call, val, _, _) or
10241045
ReturnImplies::guardControls(call, val, _, _)

0 commit comments

Comments
 (0)