From 3f4bf764d6c927ea31131c818ace622101c9a4ed Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 1 May 2025 09:07:58 +0200 Subject: [PATCH] Rust: Workaround for method existing both as source and as dependency --- .../rust/elements/internal/MethodCallExprImpl.qll | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index 8db2bb81dff..cebfaf6d5ba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -31,8 +31,9 @@ module Impl { * ``` */ class MethodCallExpr extends Generated::MethodCallExpr { - override Function getStaticTarget() { + private Function getStaticTargetFrom(boolean fromSource) { result = resolveMethodCallExpr(this) and + (if result.fromSource() then fromSource = true else fromSource = false) and ( // prioritize inherent implementation methods first isInherentImplFunction(result) @@ -54,6 +55,13 @@ module Impl { ) } + override Function getStaticTarget() { + result = this.getStaticTargetFrom(true) + or + not exists(this.getStaticTargetFrom(true)) and + result = this.getStaticTargetFrom(false) + } + private string toStringPart(int index) { index = 0 and result = this.getReceiver().toAbbreviatedString()