File tree Expand file tree Collapse file tree 1 file changed +17
-10
lines changed
ruby/ql/lib/codeql/ruby/experimental Expand file tree Collapse file tree 1 file changed +17
-10
lines changed Original file line number Diff line number Diff line change @@ -205,18 +205,25 @@ module Rbi {
205
205
abstract ParameterType getAParameterType ( ) ;
206
206
}
207
207
208
+ private predicate isMethodSignatureCallNode ( CfgNode n ) {
209
+ exists ( MethodSignatureCall sig | sig .asExpr ( ) = n )
210
+ }
211
+
208
212
/**
209
- * Holds if `n` is the `r `th transitive successor node of `sig ` where there are
210
- * no intervening `MethodSignatureCall`s.
213
+ * Holds if `n` is the `i `th transitive successor node of `sigNode ` where there
214
+ * are no intervening nodes corresponding to `MethodSignatureCall`s.
211
215
*/
212
- private predicate methodSignatureSuccessorNodeRanked ( MethodSignatureCall sig , CfgNode n , int r ) {
213
- exists ( CfgNode p2 | not exists ( MethodSignatureCall s | s .asExpr ( ) = p2 ) |
214
- r = 1 and p2 = sig .asExpr ( ) .getASuccessor ( ) and p2 = n
215
- or
216
- // set an arbitrary limit on how long the successor chain can be
217
- r = [ 2 .. 6 ] and
218
- methodSignatureSuccessorNodeRanked ( sig , p2 , r - 1 ) and
219
- n = p2 .getASuccessor ( )
216
+ private predicate methodSignatureSuccessorNodeRanked ( MethodSignatureCall sig , CfgNode n , int i ) {
217
+ // direct successor
218
+ i = 1 and
219
+ n = sig .asExpr ( ) .getASuccessor ( ) and
220
+ not isMethodSignatureCallNode ( n )
221
+ or
222
+ // transitive successor
223
+ i > 1 and
224
+ exists ( CfgNode np | n = np .getASuccessor ( ) |
225
+ methodSignatureSuccessorNodeRanked ( sig , np , i - 1 ) and
226
+ not isMethodSignatureCallNode ( np )
220
227
)
221
228
}
222
229
You can’t perform that action at this time.
0 commit comments