Skip to content

Commit 961f867

Browse files
committed
Ruby: fix getAssociatedMethod predicate to include class methods
1 parent 1e3ab52 commit 961f867

File tree

2 files changed

+9
-8
lines changed
  • ruby/ql
    • lib/codeql/ruby/experimental
    • test/library-tests/experimental

2 files changed

+9
-8
lines changed

ruby/ql/lib/codeql/ruby/experimental/Rbi.qll

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,14 @@ module Rbi {
238238
/**
239239
* Gets the method whose type signature is defined by this call.
240240
*/
241-
Method getAssociatedMethod() {
241+
ExprCfgNode getAssociatedMethod() {
242242
result =
243-
min(ExprCfgNode methodCfgNode, int i |
244-
methodSignatureSuccessorNodeRanked(this, methodCfgNode, i)
243+
min(ExprCfgNode m, int i |
244+
methodSignatureSuccessorNodeRanked(this, m, i) and
245+
m.getExpr() instanceof MethodBase
245246
|
246-
methodCfgNode order by i
247-
).getExpr()
247+
m order by i
248+
)
248249
}
249250

250251
/**
@@ -404,13 +405,13 @@ module Rbi {
404405

405406
private SignatureCall getOuterMethodSignatureCall() { this = result.getAParameterType() }
406407

407-
private Method getAssociatedMethod() {
408+
private ExprCfgNode getAssociatedMethod() {
408409
result = this.getOuterMethodSignatureCall().(MethodSignatureCall).getAssociatedMethod()
409410
}
410411

411412
/** Gets the parameter to which this type applies. */
412413
NamedParameter getParameter() {
413-
result = this.getAssociatedMethod().getAParameter() and
414+
result = this.getAssociatedMethod().getExpr().(MethodBase).getAParameter() and
414415
result.getName() = this.getKey().getConstantValue().getStringlikeValue()
415416
}
416417
}

ruby/ql/test/library-tests/experimental/Rbi.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ query predicate procParameterTypes(
4242
pc = prtc.getProcCall()
4343
}
4444

45-
query predicate sigMethods(MethodSignatureCall sig, Method m) { m = sig.getAssociatedMethod() }
45+
query predicate sigMethods(MethodSignatureCall sig, ExprCfgNode m) { m = sig.getAssociatedMethod() }
4646

4747
query predicate sigAttrReaders(MethodSignatureCall sig, ExprNodes::MethodCallCfgNode attr_reader) {
4848
attr_reader = sig.getAssociatedAttrReaderCall()

0 commit comments

Comments
 (0)