From 6aa64ba2cc7115e76097050b07e8a33d40c8fe7b Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 May 2021 12:41:22 +0000 Subject: [PATCH] Fix up `NoneCall` In some contexts, `none()` is a formula. This means in general we cannot assume `Call` is an `Expr`, but only know that it's an `AstNode`. --- ql/src/codeql_ql/ast/Ast.qll | 4 ++-- ql/src/codeql_ql/ast/internal/AstNodes.qll | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index 39447bdd175..a9400e3b07b 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -369,7 +369,7 @@ class NewTypeBranch extends TNewTypeBranch, AstNode { override NewType getParent() { result.getABranch() = this } } -class Call extends TCall, Expr { +class Call extends TCall, AstNode { Expr getArgument(int i) { none() // overriden in sublcasses. } @@ -425,7 +425,7 @@ class MemberCall extends TMemberCall, Call { Expr getBase() { toGenerated(result) = expr.getChild(0) } } -class NoneCall extends TNoneCall, Call { +class NoneCall extends TNoneCall, Call, Formula { Generated::SpecialCall call; NoneCall() { this = TNoneCall(call) } diff --git a/ql/src/codeql_ql/ast/internal/AstNodes.qll b/ql/src/codeql_ql/ast/internal/AstNodes.qll index baddf5c1d2a..2a22d8af2fb 100644 --- a/ql/src/codeql_ql/ast/internal/AstNodes.qll +++ b/ql/src/codeql_ql/ast/internal/AstNodes.qll @@ -49,7 +49,7 @@ newtype TAstNode = class TFormula = TDisjunction or TConjunction or TComparisonFormula or TQuantifier or TNegation or TIfFormula or - TImplication or TInstanceOf; + TImplication or TInstanceOf or TNoneCall or TAnyCall; class TBinOpExpr = TAddExpr;