Skip to content

Commit e417e86

Browse files
authored
Merge pull request github#14283 from hvitved/ruby/collapse-stages
Ruby: Collapse DIL stages
2 parents ab54f0c + c2306e6 commit e417e86

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ module VariableCapture {
282282
private import ruby as R
283283
private import codeql.ruby.controlflow.ControlFlowGraph
284284
private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks
285+
private import TaintTrackingPrivate as TaintTrackingPrivate
285286

286287
class Location = R::Location;
287288

@@ -296,7 +297,10 @@ module VariableCapture {
296297
BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() }
297298

298299
class CapturedVariable extends LocalVariable {
299-
CapturedVariable() { this.isCaptured() }
300+
CapturedVariable() {
301+
this.isCaptured() and
302+
TaintTrackingPrivate::forceCachingInSameStage()
303+
}
300304

301305
Callable getCallable() {
302306
exists(Scope scope | scope = this.getDeclaringScope() |
@@ -426,12 +430,11 @@ module VariableCapture {
426430
/** A collection of cached types and predicates to be evaluated in the same stage. */
427431
cached
428432
private module Cached {
429-
private import TaintTrackingPrivate as TaintTrackingPrivate
430433
private import codeql.ruby.typetracking.TypeTrackerSpecific as TypeTrackerSpecific
431434

432435
cached
433436
newtype TNode =
434-
TExprNode(CfgNodes::ExprCfgNode n) { TaintTrackingPrivate::forceCachingInSameStage() } or
437+
TExprNode(CfgNodes::ExprCfgNode n) or
435438
TReturningNode(CfgNodes::ReturningCfgNode n) or
436439
TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) or
437440
TCapturedVariableNode(VariableCapture::CapturedVariable v) or

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ private CfgNodes::ExprNodes::VariableWriteAccessCfgNode variablesInPattern(
6767
cached
6868
private module Cached {
6969
private import codeql.ruby.dataflow.FlowSteps as FlowSteps
70+
private import codeql.ruby.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon
7071

7172
cached
72-
predicate forceCachingInSameStage() { any() }
73+
predicate forceCachingInSameStage() { DataFlowImplCommon::forceCachingInSameStage() }
7374

7475
/**
7576
* Holds if the additional step from `nodeFrom` to `nodeTo` should be included

0 commit comments

Comments
 (0)