diff --git a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll index 58ca40b5e71..6e5b3e6fe03 100644 --- a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll +++ b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll @@ -1061,6 +1061,20 @@ module ExprNodes { ExprCfgNode getAnOperand() { e.hasCfgChild(e.getAnOperand(), this, result) } } + + private class AutomaticVariableChildMapping extends ExprChildMapping, AutomaticVariable { + override predicate relevantChild(Ast child) { none() } + } + + class AutomaticVariableCfgNode extends ExprCfgNode { + override string getAPrimaryQlClass() { result = "AutomaticVariableCfgNode" } + + override AutomaticVariableChildMapping e; + + override AutomaticVariable getExpr() { result = e } + + string getName() { result = e.getName() } + } } module StmtNodes { diff --git a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPublic.qll b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPublic.qll index 28cfd4ed304..b6d2676d850 100644 --- a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPublic.qll +++ b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPublic.qll @@ -555,3 +555,12 @@ class QualifiedTypeNameNode extends TypeNameNode { final override CfgNodes::ExprNodes::QualifiedTypeNameExprCfgNode getExprNode() { result = n } } + +/** A use of an automatic variable, viewed as a node in a data flow graph. */ +class AutomaticVariableNode extends ExprNode { + override CfgNodes::ExprNodes::AutomaticVariableCfgNode n; + + final override CfgNodes::ExprNodes::AutomaticVariableCfgNode getExprNode() { result = n } + + string getName() { result = n.getName() } +}