Skip to content

Commit b9027a0

Browse files
committed
Avoid using getTarget() as it may not exist
1 parent 9b3ff82 commit b9027a0

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

go/ql/lib/semmle/go/controlflow/IR.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ module IR {
744744

745745
override Type getResultType() {
746746
exists(CallExpr c | this.getBase() = evalExprInstruction(c) |
747-
result = c.getTarget().getResultType(i)
747+
result = c.getCalleeType().getResultType(i)
748748
)
749749
or
750750
exists(Expr e | this.getBase() = evalExprInstruction(e) |

go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,9 @@ predicate golangSpecificParamArgFilter(
149149
// Interface methods calls may be passed strictly to that exact method's model receiver:
150150
arg.getPosition() != -1
151151
or
152-
exists(Function callTarget | callTarget = call.getNode().(DataFlow::CallNode).getTarget() |
152+
exists(Function callTarget |
153+
callTarget = call.getNode().(DataFlow::CallNode).getACalleeIncludingExternals().asFunction()
154+
|
153155
not isInterfaceMethod(callTarget)
154156
or
155157
callTarget = p.getCallable().asSummarizedCallable().asFunction()

go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,8 @@ module Public {
439439
CallNode getCallNode() { result = call }
440440

441441
override Type getType() {
442-
exists(Function f | f = call.getTarget() |
443-
result = f.getParameterType(f.getNumParameter() - 1)
442+
exists(SignatureType t | t = call.getCall().getCalleeType() |
443+
result = t.getParameterType(t.getNumParameter() - 1)
444444
)
445445
}
446446

0 commit comments

Comments
 (0)