Skip to content

Commit a5afc3c

Browse files
committed
PS: Flow through pipelines.
1 parent 5f12d7c commit a5afc3c

File tree

3 files changed

+11
-0
lines changed

3 files changed

+11
-0
lines changed

powershell/ql/lib/semmle/code/powershell/ast/internal/Pipeline.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@ class Pipeline extends Expr, TPipeline {
2828
Expr getAComponent() { result = this.getComponent(_) }
2929

3030
int getNumberOfComponents() { result = getRawAst(this).(Raw::Pipeline).getNumberOfComponents() }
31+
32+
Expr getLastComponent() {
33+
exists(int i |
34+
result = this.getComponent(i) and
35+
not exists(this.getComponent(i + 1))
36+
)
37+
}
3138
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,8 @@ module ExprNodes {
859859
ExprCfgNode getComponent(int i) { e.hasCfgChild(e.getComponent(i), this, result) }
860860

861861
ExprCfgNode getAComponent() { result = this.getComponent(_) }
862+
863+
ExprCfgNode getLastComponent() { e.hasCfgChild(e.getLastComponent(), this, result) }
862864
}
863865

864866
private class PipelineChainChildMapping extends ExprChildMapping, PipelineChain {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ module LocalFlow {
140140
or
141141
nodeFrom.asExpr() = nodeTo.asExpr().(CfgNodes::ExprNodes::ArrayExprCfgNode)
142142
or
143+
nodeTo.asExpr().(CfgNodes::ExprNodes::PipelineCfgNode).getLastComponent() = nodeFrom.asExpr()
144+
or
143145
exists(CfgNodes::ExprCfgNode e |
144146
e = nodeFrom.(AstNode).getCfgNode() and
145147
isReturned(e) and

0 commit comments

Comments
 (0)