diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index 80cd9626b08..9663bc70319 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -84,10 +84,10 @@ private class SummarizedCallableFromModel extends SummarizedCallable { this = package + ";" + type + ";" + path } - override CallNode getACall() { + override CallCfgNode getACall() { exists(API::CallNode base | ModelOutput::resolvedSummaryBase(package, type, path, base) and - result = base.asCfgNode() + result = base.getACall() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatchPointsTo.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatchPointsTo.qll index dc327ef2419..07df64271c6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatchPointsTo.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatchPointsTo.qll @@ -281,7 +281,7 @@ abstract class LibraryCallable extends string { LibraryCallable() { any() } /** Gets a call to this library callable. */ - abstract CallNode getACall(); + abstract CallCfgNode getACall(); /** Gets a data-flow node, where this library callable is used as a call-back. */ abstract ArgumentNode getACallback(); @@ -398,7 +398,7 @@ class LibraryCallableValue extends DataFlowCallable, TLibraryCallable { override string toString() { result = callable.toString() } - override CallNode getACall() { result = callable.getACall() } + override CallNode getACall() { result = callable.getACall().getNode() } /** Gets a data-flow node, where this library callable is used as a call-back. */ ArgumentNode getACallback() { result = callable.getACallback() } @@ -772,7 +772,7 @@ DataFlowCallable viableCallable(DataFlowSourceCall call) { // Instead we reolve the call from the summary. exists(LibraryCallable callable | result = TLibraryCallable(callable) and - call.getNode() = callable.getACall() + call.getNode() = callable.getACall().getNode() ) } diff --git a/python/ql/lib/semmle/python/frameworks/Builtins.qll b/python/ql/lib/semmle/python/frameworks/Builtins.qll index 1877fe78411..b9753271f50 100644 --- a/python/ql/lib/semmle/python/frameworks/Builtins.qll +++ b/python/ql/lib/semmle/python/frameworks/Builtins.qll @@ -10,7 +10,7 @@ private import semmle.python.ApiGraphs class ReversedSummary extends SummarizedCallable { ReversedSummary() { this = "builtins.reversed" } - override CallNode getACall() { result = API::builtin("reversed").getACall().getNode() } + override DataFlow::CallCfgNode getACall() { result = API::builtin("reversed").getACall() } override DataFlow::ArgumentNode getACallback() { result = API::builtin("reversed").getAValueReachableFromSource() diff --git a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll index eb980b5b254..971a653c469 100644 --- a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll @@ -13,8 +13,8 @@ module RecursionGuard { private class RecursionGuard extends SummarizedCallable { RecursionGuard() { this = "RecursionGuard" } - override CallNode getACall() { - result.getFunction().(NameNode).getId() = this and + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this and (TT::callStep(_, _) implies any()) } @@ -25,7 +25,9 @@ module RecursionGuard { private class SummarizedCallableIdentity extends SummarizedCallable { SummarizedCallableIdentity() { this = "identity" } - override CallNode getACall() { result.getFunction().(NameNode).getId() = this } + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this + } override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this } @@ -40,7 +42,9 @@ private class SummarizedCallableIdentity extends SummarizedCallable { private class SummarizedCallableApplyLambda extends SummarizedCallable { SummarizedCallableApplyLambda() { this = "apply_lambda" } - override CallNode getACall() { result.getFunction().(NameNode).getId() = this } + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this + } override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this } @@ -58,7 +62,9 @@ private class SummarizedCallableApplyLambda extends SummarizedCallable { private class SummarizedCallableReversed extends SummarizedCallable { SummarizedCallableReversed() { this = "reversed" } - override CallNode getACall() { result.getFunction().(NameNode).getId() = this } + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this + } override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this } @@ -72,7 +78,9 @@ private class SummarizedCallableReversed extends SummarizedCallable { private class SummarizedCallableMap extends SummarizedCallable { SummarizedCallableMap() { this = "list_map" } - override CallNode getACall() { result.getFunction().(NameNode).getId() = this } + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this + } override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this } @@ -90,7 +98,9 @@ private class SummarizedCallableMap extends SummarizedCallable { private class SummarizedCallableAppend extends SummarizedCallable { SummarizedCallableAppend() { this = "append_to_list" } - override CallNode getACall() { result.getFunction().(NameNode).getId() = this } + override DataFlow::CallCfgNode getACall() { + result.getFunction().asCfgNode().(NameNode).getId() = this + } override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this } @@ -108,8 +118,8 @@ private class SummarizedCallableAppend extends SummarizedCallable { private class SummarizedCallableJsonLoads extends SummarizedCallable { SummarizedCallableJsonLoads() { this = "json.loads" } - override CallNode getACall() { - result = API::moduleImport("json").getMember("loads").getACall().getNode() + override DataFlow::CallCfgNode getACall() { + result = API::moduleImport("json").getMember("loads").getACall() } override DataFlow::ArgumentNode getACallback() {