Skip to content

Commit 7eac066

Browse files
committed
Powershell: Fix dataflow/SSA consistency errors.
1 parent c7850b1 commit 7eac066

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import semmle.code.powershell.dataflow.DataFlow::DataFlow as DataFlow
2+
private import powershell
3+
private import semmle.code.powershell.dataflow.internal.DataFlowImplSpecific
4+
private import semmle.code.powershell.dataflow.internal.TaintTrackingImplSpecific
5+
private import codeql.dataflow.internal.DataFlowImplConsistency
6+
7+
private module Input implements InputSig<Location, PowershellDataFlow> {
8+
private import PowershellDataFlow
9+
}
10+
11+
import MakeConsistency<Location, PowershellDataFlow, PowershellTaintTracking, Input>

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ abstract class NodeImpl extends Node {
3434
}
3535

3636
private class ExprNodeImpl extends ExprNode, NodeImpl {
37-
override CfgScope getCfgScope() { none() /* TODO */ }
37+
override CfgScope getCfgScope() { result = this.getExprNode().getExpr().getEnclosingScope() }
3838

3939
override Location getLocationImpl() { result = this.getExprNode().getLocation() }
4040

4141
override string toStringImpl() { result = this.getExprNode().toString() }
4242
}
4343

4444
private class StmtNodeImpl extends StmtNode, NodeImpl {
45-
override CfgScope getCfgScope() { none() /* TODO */ }
45+
override CfgScope getCfgScope() { result = this.getStmtNode().getStmt().getEnclosingScope() }
4646

4747
override Location getLocationImpl() { result = this.getStmtNode().getLocation() }
4848

@@ -69,7 +69,9 @@ module SsaFlow {
6969
Impl::Node asNode(Node n) {
7070
n = TSsaNode(result)
7171
or
72-
result.(Impl::ExprNode).getExpr() = n.asExpr() // TODO: Statement nodes?
72+
result.(Impl::ExprNode).getExpr() = n.asExpr()
73+
or
74+
result.(Impl::ExprNode).getExpr() = n.asStmt()
7375
or
7476
result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr()
7577
or
@@ -371,7 +373,8 @@ private module ParameterNodes {
371373
override Parameter getParameter() { result = parameter }
372374

373375
override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
374-
exists(CfgScope callable | callable = c.asCfgScope() |
376+
parameter.getDeclaringScope() = c.asCfgScope() and
377+
(
375378
pos.isKeyword(parameter.getName())
376379
or
377380
// Given a function f with parameters x, y we map

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ class ParameterExt extends TParameterExt {
344344
private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInputSig {
345345
class Parameter = ParameterExt;
346346

347-
class Expr extends Cfg::CfgNodes::ExprCfgNode {
347+
class Expr extends Cfg::CfgNodes::AstCfgNode {
348348
predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) }
349349
}
350350

0 commit comments

Comments
 (0)