11private import codeql.ssa.Ssa as SsaImplCommon
22private import powershell
33private import semmle.code.powershell.Cfg as Cfg
4+ private import semmle.code.powershell.controlflow.BasicBlocks as BasicBlocks
45private import semmle.code.powershell.controlflow.internal.ControlFlowGraphImpl as ControlFlowGraphImpl
56private import semmle.code.powershell.dataflow.Ssa
67import Cfg:: CfgNodes
78private import ExprNodes
89private import StmtNodes
910
10- module SsaInput implements SsaImplCommon:: InputSig< Location > {
11- private import semmle.code.powershell.controlflow.ControlFlowGraph as Cfg
12- private import semmle.code.powershell.controlflow.BasicBlocks as BasicBlocks
13-
14- class BasicBlock = BasicBlocks:: BasicBlock ;
15-
16- class ControlFlowNode = Cfg:: CfgNode ;
17-
18- BasicBlock getImmediateBasicBlockDominator ( BasicBlock bb ) { result = bb .getImmediateDominator ( ) }
11+ private class BasicBlock = BasicBlocks:: Cfg:: BasicBlock ;
1912
20- BasicBlock getABasicBlockSuccessor ( BasicBlock bb ) { result = bb .getASuccessor ( ) }
13+ module SsaInput implements SsaImplCommon:: InputSig< Location , BasicBlock > {
14+ private import semmle.code.powershell.controlflow.ControlFlowGraph as Cfg
2115
2216 class SourceVariable = Variable ;
2317
@@ -54,7 +48,7 @@ module SsaInput implements SsaImplCommon::InputSig<Location> {
5448 }
5549}
5650
57- import SsaImplCommon:: Make< Location , SsaInput > as Impl
51+ import SsaImplCommon:: Make< Location , BasicBlocks :: Cfg , SsaInput > as Impl
5852
5953class Definition = Impl:: Definition ;
6054
@@ -300,7 +294,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
300294
301295 predicate isFinalEnvVarRead ( Scope scope , EnvVariable v ) { this = TFinalEnvVarRead ( scope , v ) }
302296
303- predicate hasCfgNode ( SsaInput :: BasicBlock bb , int i ) {
297+ predicate hasCfgNode ( BasicBlock bb , int i ) {
304298 this .asExprCfgNode ( ) = bb .getNode ( i )
305299 or
306300 exists ( EnvVariable v |
@@ -341,19 +335,15 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
341335 * and that the edge from `bb1` to `bb2` corresponds to the evaluation of this
342336 * guard to `branch`.
343337 */
344- predicate valueControlsBranchEdge (
345- SsaInput:: BasicBlock bb1 , SsaInput:: BasicBlock bb2 , GuardValue branch
346- ) {
338+ predicate valueControlsBranchEdge ( BasicBlock bb1 , BasicBlock bb2 , GuardValue branch ) {
347339 this .hasValueBranchEdge ( bb1 , bb2 , branch )
348340 }
349341
350342 /**
351343 * Holds if the evaluation of this guard to `branch` corresponds to the edge
352344 * from `bb1` to `bb2`.
353345 */
354- predicate hasValueBranchEdge (
355- SsaInput:: BasicBlock bb1 , SsaInput:: BasicBlock bb2 , GuardValue branch
356- ) {
346+ predicate hasValueBranchEdge ( BasicBlock bb1 , BasicBlock bb2 , GuardValue branch ) {
357347 exists ( Cfg:: SuccessorTypes:: ConditionalSuccessor s |
358348 this .getBasicBlock ( ) = bb1 and
359349 bb2 = bb1 .getASuccessor ( s ) and
@@ -363,9 +353,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
363353 }
364354
365355 /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
366- predicate guardDirectlyControlsBlock ( Guard guard , SsaInput:: BasicBlock bb , GuardValue branch ) {
367- none ( )
368- }
356+ predicate guardDirectlyControlsBlock ( Guard guard , BasicBlock bb , GuardValue branch ) { none ( ) }
369357}
370358
371359private module DataFlowIntegrationImpl = Impl:: DataFlowIntegration< DataFlowIntegrationInput > ;
0 commit comments