diff --git a/powershell/ql/lib/semmle/code/powershell/ConvertExpr.qll b/powershell/ql/lib/semmle/code/powershell/ConvertExpr.qll index 8972000819d..e010804adb5 100644 --- a/powershell/ql/lib/semmle/code/powershell/ConvertExpr.qll +++ b/powershell/ql/lib/semmle/code/powershell/ConvertExpr.qll @@ -5,7 +5,7 @@ class ConvertExpr extends @convert_expression, Expr { override SourceLocation getLocation() { convert_expression_location(this, result) } - Expr getExpr() { convert_expression(this, _, result, _, _) } + Expr getBase() { convert_expression(this, _, result, _, _) } TypeConstraint getType() { convert_expression(this, _, _, result, _) } diff --git a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll index 5dfdd58725d..0a07630d31b 100644 --- a/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll +++ b/powershell/ql/lib/semmle/code/powershell/controlflow/CfgNodes.qll @@ -485,6 +485,22 @@ module ExprNodes { ) } } + + class ConvertExprChildMapping extends ExprChildMapping, ConvertExpr { + override predicate relevantChild(Ast n) { n = this.getBase() } + } + + class ConvertCfgNode extends ExprCfgNode { + override string getAPrimaryQlClass() { result = "ConvertCfgNode" } + + override ConvertExprChildMapping e; + + override ConvertExpr getExpr() { result = e } + + final ExprCfgNode getBase() { e.hasCfgChild(e.getBase(), this, result) } + + TypeConstraint getType() { result = e.getType() } + } } module StmtNodes { diff --git a/powershell/ql/lib/semmle/code/powershell/controlflow/internal/ControlFlowGraphImpl.qll b/powershell/ql/lib/semmle/code/powershell/controlflow/internal/ControlFlowGraphImpl.qll index eec6dd5b66f..67102e89988 100644 --- a/powershell/ql/lib/semmle/code/powershell/controlflow/internal/ControlFlowGraphImpl.qll +++ b/powershell/ql/lib/semmle/code/powershell/controlflow/internal/ControlFlowGraphImpl.qll @@ -589,7 +589,7 @@ module Trees { class ScriptBlockExprTree extends LeafTree instanceof ScriptBlockExpr { } class ConvertExprTree extends StandardPostOrderTree instanceof ConvertExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + override AstNode getChildNode(int i) { i = 0 and result = super.getBase() } } class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { diff --git a/powershell/ql/lib/semmle/code/powershell/internal/ExplicitWrite.qll b/powershell/ql/lib/semmle/code/powershell/internal/ExplicitWrite.qll index ac6c1605904..f1c660cfc7f 100644 --- a/powershell/ql/lib/semmle/code/powershell/internal/ExplicitWrite.qll +++ b/powershell/ql/lib/semmle/code/powershell/internal/ExplicitWrite.qll @@ -10,7 +10,7 @@ module Private { predicate isExplicitWrite(Expr e, AssignStmt assign) { e = assign.getLeftHandSide() or - e = any(ConvertExpr convert | isExplicitWrite(convert, assign)).getExpr() + e = any(ConvertExpr convert | isExplicitWrite(convert, assign)).getBase() or e = any(ArrayLiteral array | isExplicitWrite(array, assign)).getAnElement() }