Skip to content

Commit 4b14e5e

Browse files
committed
PS: Lift automatic variables to the cfg and dataflow layers.
1 parent 50c57c2 commit 4b14e5e

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,20 @@ module ExprNodes {
10611061

10621062
ExprCfgNode getAnOperand() { e.hasCfgChild(e.getAnOperand(), this, result) }
10631063
}
1064+
1065+
private class AutomaticVariableChildMapping extends ExprChildMapping, AutomaticVariable {
1066+
override predicate relevantChild(Ast child) { none() }
1067+
}
1068+
1069+
class AutomaticVariableCfgNode extends ExprCfgNode {
1070+
override string getAPrimaryQlClass() { result = "AutomaticVariableCfgNode" }
1071+
1072+
override AutomaticVariableChildMapping e;
1073+
1074+
override AutomaticVariable getExpr() { result = e }
1075+
1076+
string getName() { result = e.getName() }
1077+
}
10641078
}
10651079

10661080
module StmtNodes {

powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPublic.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,3 +555,12 @@ class QualifiedTypeNameNode extends TypeNameNode {
555555

556556
final override CfgNodes::ExprNodes::QualifiedTypeNameExprCfgNode getExprNode() { result = n }
557557
}
558+
559+
/** A use of an automatic variable, viewed as a node in a data flow graph. */
560+
class AutomaticVariableNode extends ExprNode {
561+
override CfgNodes::ExprNodes::AutomaticVariableCfgNode n;
562+
563+
final override CfgNodes::ExprNodes::AutomaticVariableCfgNode getExprNode() { result = n }
564+
565+
string getName() { result = n.getName() }
566+
}

0 commit comments

Comments
 (0)