From c225605ed770930aa1ab959b4274ae0389935249 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 25 Aug 2022 21:19:48 +0200 Subject: [PATCH 1/2] QL: remove consistency errors related to resolving multiple predicates from parameterized modules --- ql/ql/src/codeql_ql/ast/internal/Predicate.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll index d0a5cac8534..27ec437375c 100644 --- a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll +++ b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll @@ -209,7 +209,9 @@ module PredConsistency { not exists(p0.getAlias()) ) and c > 1 and - resolvePredicateExpr(pe, p) + resolvePredicateExpr(pe, p) and + // parameterized modules are expected to resolve to multiple. + not exists(Predicate sig | not exists(sig.getBody()) and resolvePredicateExpr(pe, sig)) } query predicate multipleResolveCall(Call call, int c, PredicateOrBuiltin p) { From dda16a0a30709e596e8c2a44ad09ce1370a577e6 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 29 Aug 2022 09:16:48 +0200 Subject: [PATCH 2/2] add a `isSignature()` predicate to `ClasslessPredicate` --- ql/ql/src/codeql_ql/ast/Ast.qll | 3 +++ ql/ql/src/codeql_ql/ast/internal/Predicate.qll | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ql/ql/src/codeql_ql/ast/Ast.qll b/ql/ql/src/codeql_ql/ast/Ast.qll index 7e7013b36c7..0ddba0703f1 100644 --- a/ql/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/ql/src/codeql_ql/ast/Ast.qll @@ -521,6 +521,9 @@ class ClasslessPredicate extends TClasslessPredicate, Predicate, ModuleDeclarati } override predicate isPrivate() { Predicate.super.isPrivate() } + + /** Holds if this classless predicate is a signature predicate with no body. */ + predicate isSignature() { not exists(this.getBody()) } } /** diff --git a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll index 27ec437375c..689880ce7e9 100644 --- a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll +++ b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll @@ -211,7 +211,7 @@ module PredConsistency { c > 1 and resolvePredicateExpr(pe, p) and // parameterized modules are expected to resolve to multiple. - not exists(Predicate sig | not exists(sig.getBody()) and resolvePredicateExpr(pe, sig)) + not exists(ClasslessPredicate sig | not sig.isSignature() and resolvePredicateExpr(pe, sig)) } query predicate multipleResolveCall(Call call, int c, PredicateOrBuiltin p) { @@ -227,6 +227,6 @@ module PredConsistency { c > 1 and resolveCall(call, p) and // parameterized modules are expected to resolve to multiple. - not exists(Predicate sig | not exists(sig.getBody()) and resolveCall(call, sig)) + not exists(ClasslessPredicate sig | not sig.isSignature() and resolveCall(call, sig)) } }