File tree Expand file tree Collapse file tree 4 files changed +18
-4
lines changed
lib/codeql/ruby/controlflow Expand file tree Collapse file tree 4 files changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -37,8 +37,14 @@ private module Input implements InputSig<RubyDataFlow> {
3737 }
3838
3939 predicate multipleArgumentCallExclude ( ArgumentNode arg , DataFlowCall call ) {
40- arg .asExpr ( ) .getASuccessor ( any ( SuccessorTypes:: ConditionalSuccessor c ) ) .getASuccessor ( ) =
41- call .asCall ( )
40+ // An argument such as `x` in `if not x then ...` has two successors (and hence
41+ // two calls); one for each Boolean outcome of `x`.
42+ exists ( CfgNodes:: ExprCfgNode n |
43+ arg .argumentOf ( call , _) and
44+ n = call .asCall ( ) and
45+ arg .asExpr ( ) .getASuccessor ( any ( SuccessorTypes:: ConditionalSuccessor c ) ) .getASuccessor * ( ) = n and
46+ n .getASplit ( ) instanceof Split:: ConditionalCompletionSplit
47+ )
4248 }
4349}
4450
Original file line number Diff line number Diff line change @@ -7,7 +7,6 @@ private import codeql.ruby.ast.internal.Constant
77private import codeql.ruby.ast.internal.Literal
88private import ControlFlowGraph
99private import internal.ControlFlowGraphImpl as CfgImpl
10- private import internal.Splitting
1110
1211/** An entry node for a given scope. */
1312class EntryNode extends CfgNode , CfgImpl:: EntryNode {
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ private import codeql.ruby.AST
44private import codeql.ruby.controlflow.BasicBlocks
55private import SuccessorTypes
66private import internal.ControlFlowGraphImpl as CfgImpl
7- private import internal.Splitting
7+ private import internal.Splitting as Splitting
88private import internal.Completion
99
1010/**
@@ -293,3 +293,10 @@ module SuccessorTypes {
293293 final override string toString ( ) { result = "exit" }
294294 }
295295}
296+
297+ class Split = Splitting:: Split ;
298+
299+ /** Provides different kinds of control flow graph splittings. */
300+ module Split {
301+ class ConditionalCompletionSplit = Splitting:: ConditionalCompletionSplit ;
302+ }
Original file line number Diff line number Diff line change @@ -115,6 +115,8 @@ private module ConditionalCompletionSplitting {
115115 }
116116}
117117
118+ class ConditionalCompletionSplit = ConditionalCompletionSplitting:: ConditionalCompletionSplit ;
119+
118120module EnsureSplitting {
119121 /**
120122 * The type of a split `ensure` node.
You can’t perform that action at this time.
0 commit comments