Skip to content

Commit a2dc505

Browse files
authored
Merge pull request github#7317 from hvitved/ruby/param-node-refactor
Ruby: Restructure `ParameterNode(Impl)`
2 parents 5183290 + 5dbbb86 commit a2dc505

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,9 @@ class ReturningStatementNode extends NodeImpl, TReturningNode {
320320
}
321321

322322
private module ParameterNodes {
323-
abstract class ParameterNodeImpl extends ParameterNode, NodeImpl {
323+
abstract class ParameterNodeImpl extends NodeImpl {
324+
abstract Parameter getParameter();
325+
324326
abstract predicate isSourceParameterOf(Callable c, int i);
325327

326328
predicate isParameterOf(DataFlowCallable c, int i) {
@@ -341,6 +343,10 @@ private module ParameterNodes {
341343

342344
override predicate isSourceParameterOf(Callable c, int i) { c.getParameter(i) = parameter }
343345

346+
override predicate isParameterOf(DataFlowCallable c, int i) {
347+
this.isSourceParameterOf(c.asCallable(), i)
348+
}
349+
344350
override CfgScope getCfgScope() { result = parameter.getCallable() }
345351

346352
override Location getLocationImpl() { result = parameter.getLocation() }
@@ -359,8 +365,14 @@ private module ParameterNodes {
359365

360366
final MethodBase getMethod() { result = method }
361367

368+
override Parameter getParameter() { none() }
369+
362370
override predicate isSourceParameterOf(Callable c, int i) { method = c and i = -1 }
363371

372+
override predicate isParameterOf(DataFlowCallable c, int i) {
373+
this.isSourceParameterOf(c.asCallable(), i)
374+
}
375+
364376
override CfgScope getCfgScope() { result = method }
365377

366378
override Location getLocationImpl() { result = method.getLocation() }
@@ -385,6 +397,10 @@ private module ParameterNodes {
385397

386398
override predicate isSourceParameterOf(Callable c, int i) { c = method and i = -2 }
387399

400+
override predicate isParameterOf(DataFlowCallable c, int i) {
401+
this.isSourceParameterOf(c.asCallable(), i)
402+
}
403+
388404
override CfgScope getCfgScope() { result = method }
389405

390406
override Location getLocationImpl() {
@@ -407,6 +423,8 @@ private module ParameterNodes {
407423

408424
SummaryParameterNode() { this = TSummaryParameterNode(sc, pos) }
409425

426+
override Parameter getParameter() { none() }
427+
410428
override predicate isSourceParameterOf(Callable c, int i) { none() }
411429

412430
override predicate isParameterOf(DataFlowCallable c, int i) { sc = c and i = pos }
@@ -442,7 +460,7 @@ class SummaryNode extends NodeImpl, TSummaryNode {
442460
/** A data-flow node that represents a call argument. */
443461
abstract class ArgumentNode extends Node {
444462
/** Holds if this argument occurs at the given position in the given call. */
445-
predicate argumentOf(DataFlowCall call, int pos) { this.sourceArgumentOf(call.asCall(), pos) }
463+
abstract predicate argumentOf(DataFlowCall call, int pos);
446464

447465
abstract predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos);
448466

@@ -457,6 +475,10 @@ private module ArgumentNodes {
457475

458476
ExplicitArgumentNode() { this.asExpr() = arg }
459477

478+
override predicate argumentOf(DataFlowCall call, int pos) {
479+
this.sourceArgumentOf(call.asCall(), pos)
480+
}
481+
460482
override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos) {
461483
arg.isArgumentOf(call, pos)
462484
}
@@ -474,6 +496,10 @@ private module ArgumentNodes {
474496
exists(CfgNodes::ExprNodes::CallCfgNode c | c.getBlock() = this.asExpr())
475497
}
476498

499+
override predicate argumentOf(DataFlowCall call, int pos) {
500+
this.sourceArgumentOf(call.asCall(), pos)
501+
}
502+
477503
override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos) {
478504
pos = -2 and
479505
(

ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ class ExprNode extends Node, TExprNode {
8383
* The value of a parameter at function entry, viewed as a node in a data
8484
* flow graph.
8585
*/
86-
class ParameterNode extends Node, TParameterNode {
86+
class ParameterNode extends Node, TParameterNode instanceof ParameterNodeImpl {
8787
/** Gets the parameter corresponding to this node, if any. */
88-
Parameter getParameter() { none() }
88+
final Parameter getParameter() { result = super.getParameter() }
8989
}
9090

9191
/**

0 commit comments

Comments
 (0)