Skip to content

Commit 8bed953

Browse files
committed
PS: Flow through array expressions.
1 parent e63778a commit 8bed953

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ module LocalFlow {
102102
or
103103
nodeFrom.asExpr() = nodeTo.asStmt().(CfgNodes::StmtNodes::CmdExprCfgNode).getExpr()
104104
or
105+
exists(
106+
CfgNodes::ExprNodes::ArrayExprCfgNode arrayExpr, EscapeContainer::EscapeContainer container
107+
|
108+
nodeTo.asExpr() = arrayExpr and
109+
container = arrayExpr.getStmtBlock().getAstNode() and
110+
nodeFrom.(AstNode).getCfgNode() = container.getAnEscapingElement() and
111+
not container.mayBeMultiReturned(_)
112+
)
113+
or
105114
nodeFrom.(AstNode).getCfgNode() = nodeTo.(PreReturNodeImpl).getReturnedNode()
106115
or
107116
exists(CfgNode cfgNode |
@@ -667,6 +676,15 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
667676
index = ec.getIndex().asInt()
668677
)
669678
or
679+
exists(
680+
CfgNodes::ExprNodes::ArrayExprCfgNode arrayExpr, EscapeContainer::EscapeContainer container
681+
|
682+
node2.asExpr() = arrayExpr and
683+
container = arrayExpr.getStmtBlock().getAstNode() and
684+
node1.(AstNode).getCfgNode() = container.getAnEscapingElement() and
685+
container.mayBeMultiReturned(_)
686+
)
687+
or
670688
c.isAnyElement() and
671689
exists(CfgNode cfgNode |
672690
node1 = TPreReturnNodeImpl(cfgNode, false) and

0 commit comments

Comments
 (0)