@@ -3,6 +3,7 @@ private import codeql_ruby.CFG
33private import codeql_ruby.dataflow.SSA
44private import DataFlowPublic
55private import DataFlowDispatch
6+ private import SsaImpl as SsaImpl
67
78abstract 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
440444import 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
444454predicate storeStep ( Node node1 , Content c , Node node2 ) { none ( ) }
445455
0 commit comments