From 967a210f0bbf41f5bfbcccc217b0fb24a32267ce Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 27 Apr 2026 12:40:32 +0100 Subject: [PATCH] PS: Fix two bad joins. --- .../ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll | 5 ++++- .../code/powershell/dataflow/internal/DataFlowPrivate.qll | 7 ++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll index bb9b4b43c425..f33aa3484602 100644 --- a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll +++ b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll @@ -62,6 +62,9 @@ class StmtCfgNode extends AstCfgNode { Stmt getStmt() { result = s } } +pragma[nomagic] +private BasicBlock getARelevantBasicBlock(Ast a) { result.getANode().getAstNode() = a } + /** * A class for mapping parent-child AST nodes to parent-child CFG nodes. */ @@ -86,7 +89,7 @@ abstract private class ChildMapping extends Ast { or exists(BasicBlock mid | this.reachesBasicBlock(child, cfn, mid) and - not mid.getANode().getAstNode() = child + not mid = getARelevantBasicBlock(child) | if this.precedesParent(child) then bb = mid.getAPredecessor() else bb = mid.getASuccessor() ) diff --git a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPrivate.qll b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPrivate.qll index 23e642a1822f..371404a4dca5 100644 --- a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPrivate.qll +++ b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/DataFlowPrivate.qll @@ -1083,11 +1083,8 @@ predicate readStep(Node node1, ContentSet c, Node node2) { ) or // Read from a collection into a `foreach` loop - exists( - CfgNodes::StmtNodes::ForEachStmtCfgNode forEach, Content::KnownElementContent ec, BasicBlock bb, - int i - | - c.isKnownOrUnknownElement(ec) and + c.isAnyPositional() and + exists(CfgNodes::StmtNodes::ForEachStmtCfgNode forEach, BasicBlock bb, int i | node1.asExpr() = forEach.getIterableExpr() and bb.getNode(i) = forEach.getVarAccess() and node2.asDefinition().definesAt(_, bb, i)