Skip to content

Commit 82fbc03

Browse files
authored
Merge pull request #200 from github/hvitved/dataflow/call-sensitivity
Data flow: Call-sensitive resolution of lambda/block calls
2 parents ec326bf + 61e35dd commit 82fbc03

8 files changed

Lines changed: 375 additions & 113 deletions

File tree

codeql

Submodule codeql updated 393 files

ql/src/codeql_ruby/controlflow/CfgNodes.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ module ExprNodes {
249249
class CallCfgNode extends ExprCfgNode {
250250
override CallExprChildMapping e;
251251

252-
final override Call getExpr() { result = ExprCfgNode.super.getExpr() }
252+
override Call getExpr() { result = super.getExpr() }
253253

254254
/** Gets the `n`th argument of this call. */
255255
final ExprCfgNode getArgument(int n) { e.hasCfgChild(e.getArgument(n), this, result) }
@@ -270,7 +270,9 @@ module ExprNodes {
270270

271271
/** A control-flow node that wraps a `MethodCall` AST expression. */
272272
class MethodCallCfgNode extends CallCfgNode {
273-
MethodCallCfgNode() { this.getExpr() instanceof MethodCall }
273+
MethodCallCfgNode() { super.getExpr() instanceof MethodCall }
274+
275+
final override MethodCall getExpr() { result = super.getExpr() }
274276
}
275277

276278
/** A control-flow node that wraps a `CaseExpr` AST expression. */

ql/src/codeql_ruby/dataflow/internal/DataFlowDispatch.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,10 @@ private DataFlow::LocalSourceNode trackModule(Module tp) {
282282
}
283283

284284
/** Gets a viable run-time target for the call `call`. */
285-
DataFlowCallable viableCallable(DataFlowCall call) { result = call.getTarget() }
285+
DataFlowCallable viableCallable(DataFlowCall call) {
286+
result = call.getTarget() and
287+
not call.getExpr() instanceof YieldCall // handled by `lambdaCreation`/`lambdaCall`
288+
}
286289

287290
/**
288291
* Holds if the set of viable implementations that can be called by `call`

0 commit comments

Comments
 (0)