mirror of
https://github.com/github/codeql.git
synced 2026-04-27 09:45:15 +02:00
fix some instances of spuriously resolving to multiple predicates
This commit is contained in:
@@ -31,7 +31,8 @@ private predicate definesPredicate(
|
||||
name = alias.getName() and
|
||||
resolvePredicateExpr(alias.getAlias(), p) and
|
||||
public = getPublicBool(alias) and
|
||||
arity = alias.getArity()
|
||||
arity = alias.getArity() and
|
||||
arity = p.getArity()
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -53,10 +54,12 @@ private module Cached {
|
||||
}
|
||||
|
||||
private predicate resolvePredicateCall(PredicateCall pc, PredicateOrBuiltin p) {
|
||||
// calls to class methods
|
||||
exists(Class c, ClassType t |
|
||||
c = pc.getParent*() and
|
||||
t = c.getType() and
|
||||
p = t.getClassPredicate(pc.getPredicateName(), pc.getNumberOfArguments())
|
||||
p = t.getClassPredicate(pc.getPredicateName(), pc.getNumberOfArguments()) and
|
||||
not exists(pc.getQualifier()) // no module qualifier, because then it's not a call to a class method.
|
||||
)
|
||||
or
|
||||
exists(FileOrModule m, boolean public |
|
||||
|
||||
26
ql/ql/test/callgraph/MultiResolve.qll
Normal file
26
ql/ql/test/callgraph/MultiResolve.qll
Normal file
@@ -0,0 +1,26 @@
|
||||
predicate foo(int a, int b) {
|
||||
a = 2 and
|
||||
b = 2
|
||||
}
|
||||
|
||||
predicate foo(int a, int b, int c) {
|
||||
a = 2 and
|
||||
b = 2 and
|
||||
c = 2
|
||||
}
|
||||
|
||||
predicate myFoo = foo/2;
|
||||
|
||||
predicate test(int i) { myFoo(i, i) } // <- should only resolve to the `foo` with 2 arguments (and the `myFoo` alias).
|
||||
|
||||
module MyMod {
|
||||
predicate bar() { any() }
|
||||
|
||||
class Bar extends int {
|
||||
Bar() { this = 42 }
|
||||
|
||||
predicate bar() {
|
||||
MyMod::bar() // <- should resolve to the module's predicate.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,9 @@ getTarget
|
||||
| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:24:3:24:32 | ClasslessPredicate alias0 |
|
||||
| Foo.qll:36:36:36:65 | MemberCall | file://:0:0:0:0 | replaceAll |
|
||||
| Foo.qll:38:39:38:67 | MemberCall | file://:0:0:0:0 | regexpCapture |
|
||||
| MultiResolve.qll:14:25:14:35 | PredicateCall | MultiResolve.qll:1:1:4:1 | ClasslessPredicate foo |
|
||||
| MultiResolve.qll:14:25:14:35 | PredicateCall | MultiResolve.qll:12:1:12:24 | ClasslessPredicate myFoo |
|
||||
| MultiResolve.qll:25:7:25:18 | PredicateCall | MultiResolve.qll:17:3:19:3 | ClasslessPredicate bar |
|
||||
| Overrides.qll:8:30:8:39 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
|
||||
| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
|
||||
| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:14:12:14:43 | ClassPredicate bar |
|
||||
@@ -43,5 +46,7 @@ exprPredicate
|
||||
| Foo.qll:26:22:26:31 | predicate | Foo.qll:20:3:20:54 | ClasslessPredicate myThing2 |
|
||||
| Foo.qll:47:55:47:62 | predicate | Foo.qll:42:20:42:27 | NewTypeBranch MkRoot |
|
||||
| Foo.qll:47:65:47:70 | predicate | Foo.qll:44:9:44:56 | ClasslessPredicate edge |
|
||||
| MultiResolve.qll:12:19:12:23 | predicate | MultiResolve.qll:1:1:4:1 | ClasslessPredicate foo |
|
||||
| MultiResolve.qll:12:19:12:23 | predicate | MultiResolve.qll:6:1:10:1 | ClasslessPredicate foo |
|
||||
| ParamModules.qll:4:18:4:25 | predicate | ParamModules.qll:2:13:2:36 | ClasslessPredicate fooSig |
|
||||
| ParamModules.qll:10:34:10:40 | predicate | ParamModules.qll:8:3:8:35 | ClasslessPredicate myFoo |
|
||||
|
||||
Reference in New Issue
Block a user