Skip to content

Commit 984a589

Browse files
committed
don't depend on the callgraph in KernelArraySummary
1 parent 4307889 commit 984a589

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,18 +198,21 @@ module Kernel {
198198
}
199199
}
200200

201+
private import codeql.ruby.ast.internal.Module as Module
202+
201203
/**
202204
* A call to `Array()`, that converts it's singular argument to an array.
203205
* This summary is based on https://ruby-doc.org/3.2.1/Kernel.html#method-i-Array
204206
*/
205207
private class KernelArraySummary extends SummarizedCallable {
206208
KernelArraySummary() { this = "Array()" }
207209

208-
override MethodCall getACall() {
210+
override MethodCall getACallSimple() {
209211
result.getMethodName() = "Array" and
210212
// I have to have a simplified "KernelMethodCall" implementation inlined here, because relying on `UnknownMethodCall` results in non-monotonic recursion (even if using `getACall`).
211213
(
212-
result = API::getTopLevelMember("Kernel").getAMethodCall(_).asExpr().getExpr()
214+
// similar to `getAStaticArrayCall` from Array.qll
215+
Module::resolveConstantReadAccess(result.getReceiver()) = Module::TResolved("Kernel")
213216
or
214217
result.getReceiver() instanceof SelfVariableAccess
215218
)

0 commit comments

Comments
 (0)