Skip to content

Commit bacbd5e

Browse files
committed
Address comments
1 parent 423a1b3 commit bacbd5e

3 files changed

Lines changed: 18 additions & 16 deletions

File tree

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ private import codeql_ruby.CFG
33
private import codeql_ruby.dataflow.SSA
44
private import DataFlowPublic
55
private import DataFlowDispatch
6+
private import SsaImpl as SsaImpl
67

78
abstract class NodeImpl extends Node {
89
/** Do not call: use `getEnclosingCallable()` instead. */
@@ -50,8 +51,11 @@ module LocalFlow {
5051
*/
5152
predicate localSsaFlowStep(Ssa::Definition def, Node nodeFrom, Node nodeTo) {
5253
// Flow from parameter into SSA definition
53-
nodeFrom.(ParameterNode).getParameter().(NamedParameter).getVariable() = def.getSourceVariable() and
54-
nodeTo.(SsaDefinitionNode).getDefinition() = def
54+
exists(BasicBlock bb, int i |
55+
bb.getNode(i).getNode() =
56+
nodeFrom.(ParameterNode).getParameter().(NamedParameter).getDefiningAccess() and
57+
nodeTo.(SsaDefinitionNode).getDefinition().definesAt(_, bb, i)
58+
)
5559
or
5660
// Flow from assignment into SSA definition
5761
exists(CfgNodes::ExprNodes::AssignmentCfgNode a, BasicBlock bb, int i |
@@ -227,13 +231,13 @@ private module ParameterNodes {
227231
abstract private class ParameterNodeImpl extends ParameterNode, NodeImpl { }
228232

229233
/**
230-
* The value of an explicit parameter at function entry, viewed as a node in a data
234+
* The value of a normal parameter at function entry, viewed as a node in a data
231235
* flow graph.
232236
*/
233-
class ExplicitParameterNode extends ParameterNodeImpl, TNormalParameterNode {
237+
class NormalParameterNode extends ParameterNodeImpl, TNormalParameterNode {
234238
private Parameter parameter;
235239

236-
ExplicitParameterNode() { this = TNormalParameterNode(parameter) }
240+
NormalParameterNode() { this = TNormalParameterNode(parameter) }
237241

238242
override Parameter getParameter() { result = parameter }
239243

@@ -439,7 +443,13 @@ private module OutNodes {
439443

440444
import OutNodes
441445

442-
predicate jumpStep(Node pred, Node succ) { none() }
446+
predicate jumpStep(Node pred, Node succ) {
447+
SsaImpl::captureFlowIn(pred.(SsaDefinitionNode).getDefinition(),
448+
succ.(SsaDefinitionNode).getDefinition())
449+
or
450+
SsaImpl::captureFlowOut(pred.(SsaDefinitionNode).getDefinition(),
451+
succ.(SsaDefinitionNode).getDefinition())
452+
}
443453

444454
predicate storeStep(Node node1, Content c, Node node2) { none() }
445455

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private module Cached {
198198
}
199199

200200
/**
201-
* Holds if there is outgoinh flow for a captured variable that is updated in a block.
201+
* Holds if there is outgoing flow for a captured variable that is updated in a block.
202202
* ```rb
203203
* foo = 0
204204
* bar {

ql/src/codeql_ruby/typetracking/TypeTrackerSpecific.qll

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,7 @@ class LocalSourceNode = DataFlowPublic::LocalSourceNode;
1212

1313
predicate simpleLocalFlowStep = DataFlowPrivate::simpleLocalFlowStep/2;
1414

15-
predicate jumpStep(Node nodeFrom, Node nodeTo) {
16-
DataFlowPrivate::jumpStep(nodeFrom, nodeTo)
17-
or
18-
SsaImpl::captureFlowIn(nodeFrom.(DataFlowPrivate::SsaDefinitionNode).getDefinition(),
19-
nodeTo.(DataFlowPrivate::SsaDefinitionNode).getDefinition())
20-
or
21-
SsaImpl::captureFlowOut(nodeFrom.(DataFlowPrivate::SsaDefinitionNode).getDefinition(),
22-
nodeTo.(DataFlowPrivate::SsaDefinitionNode).getDefinition())
23-
}
15+
predicate jumpStep = DataFlowPrivate::jumpStep/2;
2416

2517
/**
2618
* Gets the name of a possible piece of content. This will usually include things like

0 commit comments

Comments
 (0)