diff --git a/ql/src/codeql_ruby/controlflow/internal/Completion.qll b/ql/src/codeql_ruby/controlflow/internal/Completion.qll index 0c918a56dc9..c1148d430e3 100644 --- a/ql/src/codeql_ruby/controlflow/internal/Completion.qll +++ b/ql/src/codeql_ruby/controlflow/internal/Completion.qll @@ -175,18 +175,13 @@ private predicate inBooleanContext(AstNode n) { or n = any(NotExpr parent | inBooleanContext(parent)).getOperand() or - n = any(ParenthesizedExpr parent | inBooleanContext(parent)).getLastExpr() + n = any(StmtSequence parent | inBooleanContext(parent)).getLastExpr() or exists(CaseExpr c, WhenExpr w | not exists(c.getValue()) and c.getAWhenBranch() = w and w.getPattern(_) = n ) - or - exists(StmtSequence parent | - inBooleanContext(parent) and - n = parent.getLastExpr() - ) } /** diff --git a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll index dd1d30430b2..931f7020666 100644 --- a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -206,24 +206,9 @@ private predicate succImpl(AstNode pred, AstNode succ, Completion c) { } private predicate isHidden(ControlFlowTree t) { + not t instanceof ASTInternal::AstNode::Range + or t.isHidden() - or - t = any(Method m).getName() - or - t = any(Class m).getName() - or - t = any(Module m).getName() - or - t = any(ScopeResolution m).getName() - or - t = any(SingletonMethod m).getName() - or - t = any(Call c).getMethod() and - not t instanceof ScopeResolution - or - t instanceof RestAssignment - or - t instanceof Superclass } private predicate succImplIfHidden(AstNode pred, AstNode succ) { diff --git a/ql/src/codeql_ruby/controlflow/internal/Splitting.qll b/ql/src/codeql_ruby/controlflow/internal/Splitting.qll index d56e1771af8..c54cbc27b65 100644 --- a/ql/src/codeql_ruby/controlflow/internal/Splitting.qll +++ b/ql/src/codeql_ruby/controlflow/internal/Splitting.qll @@ -3,7 +3,6 @@ */ private import codeql_ruby.AST -private import AstNodes private import Completion private import ControlFlowGraphImpl private import SuccessorTypes @@ -218,19 +217,19 @@ private module ConditionalCompletionSplitting { succ(pred, succ, c) and last(succ, _, completion) and ( - last(succ.(LogicalNotAstNode).getOperand(), pred, c) and + last(succ.(NotExpr).getOperand(), pred, c) and completion.(BooleanCompletion).getDual() = c or - last(succ.(LogicalAndAstNode).getAnOperand(), pred, c) and + last(succ.(LogicalAndExpr).getAnOperand(), pred, c) and completion = c or - last(succ.(LogicalOrAstNode).getAnOperand(), pred, c) and + last(succ.(LogicalOrExpr).getAnOperand(), pred, c) and completion = c or - last(succ.(ParenthesizedStatement).getChild(), pred, c) and + last(succ.(ParenthesizedExpr).getLastExpr(), pred, c) and completion = c or - last(succ.(IfElsifAstNode).getBranch(_), pred, c) and + last(succ.(ConditionalExpr).getBranch(_), pred, c) and completion = c ) }