From a998879897ed9240d1df3fb44362e02b1fcc8d41 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 4 Feb 2021 13:49:55 +0100 Subject: [PATCH] Add local flow step for parenthesized expressions --- ql/src/codeql_ruby/controlflow/CfgNodes.qll | 5 +++++ ql/src/codeql_ruby/dataflow/internal/DataFlowPrivate.qll | 3 +++ 2 files changed, 8 insertions(+) diff --git a/ql/src/codeql_ruby/controlflow/CfgNodes.qll b/ql/src/codeql_ruby/controlflow/CfgNodes.qll index fed5005f2de..c08df48c8a6 100644 --- a/ql/src/codeql_ruby/controlflow/CfgNodes.qll +++ b/ql/src/codeql_ruby/controlflow/CfgNodes.qll @@ -249,6 +249,11 @@ module ExprNodes { final ExprCfgNode getExpr(int n) { e.hasCfgChild(e.getExpr(n), this, result) } } + /** A control-flow node that wraps an `ExprSequence` AST expression. */ + class ParenthesizedExprCfgNode extends ExprSequenceCfgNode { + ParenthesizedExprCfgNode() { this.getExpr() instanceof ParenthesizedExpr } + } + /** A control-flow node that wraps a `VariableReadAccess` AST expression. */ class VariableReadAccessCfgNode extends ExprCfgNode { override VariableReadAccess e; diff --git a/ql/src/codeql_ruby/dataflow/internal/DataFlowPrivate.qll b/ql/src/codeql_ruby/dataflow/internal/DataFlowPrivate.qll index 7802e098324..bbfb4019c33 100644 --- a/ql/src/codeql_ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ql/src/codeql_ruby/dataflow/internal/DataFlowPrivate.qll @@ -124,6 +124,9 @@ private module Cached { exists(Ssa::Definition def | LocalFlow::localSsaFlowStep(def, nodeFrom, nodeTo)) or nodeFrom.asExpr() = nodeTo.asExpr().(CfgNodes::ExprNodes::AssignExprCfgNode).getRhs() + or + nodeFrom.asExpr() = + nodeTo.asExpr().(CfgNodes::ExprNodes::ParenthesizedExprCfgNode).getLastExpr() } cached