Skip to content

Commit dce817e

Browse files
committed
resolve calls to all instantiations of a signature predicate
1 parent 2a7a0f3 commit dce817e

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

ql/ql/src/codeql_ql/ast/internal/Predicate.qll

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,16 @@ private module Cached {
7070
definesPredicate(m, pc.getPredicateName(), pc.getNumberOfArguments(), p, public)
7171
)
7272
or
73-
exists(Module mod, PredicateExpr sig |
74-
mod.hasParameter(_, pc.getPredicateName(), sig) and
75-
p = sig.getResolvedPredicate() and // <- this is a `signature predicate`, but that's fine.
76-
sig.getArity() = pc.getNumberOfArguments() // TODO: resolve all instantiations?
73+
exists(Module mod, PredicateExpr sig, int i |
74+
mod.hasParameter(i, pc.getPredicateName(), sig) and
75+
sig.getArity() = pc.getNumberOfArguments()
76+
|
77+
p = sig.getResolvedPredicate() // <- this is a `signature predicate`, but that's fine.
78+
or
79+
exists(ModuleExpr inst, SignatureExpr arg | inst.getResolvedModule().asModule() = mod |
80+
arg = inst.getArgument(i) and
81+
p = arg.asPredicate().getResolvedPredicate()
82+
)
7783
)
7884
}
7985

ql/ql/test/callgraph/callgraph.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ getTarget
2222
| Overrides.qll:28:3:28:9 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
2323
| Overrides.qll:29:3:29:10 | MemberCall | Overrides.qll:8:3:8:41 | ClassPredicate baz |
2424
| ParamModules.qll:5:28:5:41 | PredicateCall | ParamModules.qll:2:13:2:36 | ClasslessPredicate fooSig |
25+
| ParamModules.qll:5:28:5:41 | PredicateCall | ParamModules.qll:8:3:8:35 | ClasslessPredicate myFoo |
2526
| ParamModules.qll:10:26:10:49 | PredicateCall | ParamModules.qll:5:5:5:43 | ClasslessPredicate bar |
2627
| ParamModules.qll:26:27:26:53 | PredicateCall | ParamModules.qll:17:5:17:42 | ClasslessPredicate getAnEven |
2728
| ParamModules.qll:26:27:26:61 | MemberCall | ParamModules.qll:23:5:23:39 | ClassPredicate myFoo |

0 commit comments

Comments
 (0)