From 62802d53c829b300b264b78db66d5afe6a40ec08 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 4 Feb 2021 15:29:09 +0100 Subject: [PATCH] Ensure module/class/methods and their headers belong to the right CfgScope --- ql/src/codeql_ruby/ast/internal/Variable.qll | 2 +- .../controlflow/internal/ControlFlowGraphImpl.qll | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ql/src/codeql_ruby/ast/internal/Variable.qll b/ql/src/codeql_ruby/ast/internal/Variable.qll index fdbad09e68a..7177334f62e 100644 --- a/ql/src/codeql_ruby/ast/internal/Variable.qll +++ b/ql/src/codeql_ruby/ast/internal/Variable.qll @@ -5,7 +5,7 @@ private import codeql_ruby.ast.internal.Expr private import codeql_ruby.ast.internal.Method private import codeql_ruby.ast.internal.Pattern -private Generated::AstNode parentOf(Generated::AstNode n) { +Generated::AstNode parentOf(Generated::AstNode n) { exists(Generated::AstNode parent | parent = n.getParent() | if n = diff --git a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll index 5207043e3c7..91272933774 100644 --- a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -33,6 +33,7 @@ private import codeql_ruby.ast.internal.TreeSitter::Generated private import AstNodes +private import codeql_ruby.ast.internal.Variable private import codeql_ruby.controlflow.ControlFlowGraph private import Completion private import SuccessorTypes @@ -146,7 +147,7 @@ module CfgScope { } private AstNode parent(AstNode n) { - result.getAFieldOrChild() = n and + result = parentOf(n) and not n instanceof CfgScope } @@ -1262,7 +1263,7 @@ cached private module Cached { /** Gets the CFG scope of node `n`. */ cached - CfgScope getCfgScope(AstNode n) { result = unique(CfgScope scope | scope = parent+(n)) } + CfgScope getCfgScope(AstNode n) { result = unique(CfgScope scope | scope = parent*(parentOf(n))) } private predicate isAbnormalExitType(SuccessorType t) { t instanceof RaiseSuccessor or t instanceof ExitSuccessor