Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 67c3a9b

Browse files
committed
Python: resolve library calls in the CFG
rather than in the AST
1 parent e5f0875 commit 67c3a9b

2 files changed

Lines changed: 9 additions & 9 deletions

File tree

python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatchPointsTo.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ abstract class LibraryCallable extends string {
282282
LibraryCallable() { any() }
283283

284284
/** Gets a call to this library callable. */
285-
abstract Call getACall();
285+
abstract CallNode getACall();
286286

287287
/** Gets a data-flow node, where this library callable is used as a call-back. */
288288
abstract ArgumentNode getACallback();
@@ -405,7 +405,7 @@ class LibraryCallableValue extends DataFlowCallable, TLibraryCallable {
405405

406406
override string toString() { result = callable.toString() }
407407

408-
override CallNode getACall() { result.getNode() = callable.getACall() }
408+
override CallNode getACall() { result = callable.getACall() }
409409

410410
/** Gets a data-flow node, where this library callable is used as a call-back. */
411411
ArgumentNode getACallback() { result = callable.getACallback() }
@@ -639,7 +639,7 @@ class SpecialCall extends DataFlowSourceCall, TSpecialCall {
639639
class LibraryCall extends NormalCall {
640640
LibraryCallable callable;
641641

642-
LibraryCall() { call.getNode() = callable.getACall() }
642+
LibraryCall() { call = callable.getACall() }
643643

644644
// TODO: Implement Python calling convention?
645645
override Node getArg(int n) { result = TCfgNode(call.getArg(n)) }

python/ql/test/experimental/dataflow/summaries/TestSummaries.qll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ private import semmle.python.ApiGraphs
55
private class SummarizedCallableIdentity extends SummarizedCallable {
66
SummarizedCallableIdentity() { this = "identity" }
77

8-
override Call getACall() { result.getFunc().(Name).getId() = this }
8+
override CallNode getACall() { result.getFunction().(NameNode).getId() = this }
99

1010
override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this }
1111

@@ -20,7 +20,7 @@ private class SummarizedCallableIdentity extends SummarizedCallable {
2020
private class SummarizedCallableApplyLambda extends SummarizedCallable {
2121
SummarizedCallableApplyLambda() { this = "apply_lambda" }
2222

23-
override Call getACall() { result.getFunc().(Name).getId() = this }
23+
override CallNode getACall() { result.getFunction().(NameNode).getId() = this }
2424

2525
override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this }
2626

@@ -38,7 +38,7 @@ private class SummarizedCallableApplyLambda extends SummarizedCallable {
3838
private class SummarizedCallableReversed extends SummarizedCallable {
3939
SummarizedCallableReversed() { this = "reversed" }
4040

41-
override Call getACall() { result.getFunc().(Name).getId() = this }
41+
override CallNode getACall() { result.getFunction().(NameNode).getId() = this }
4242

4343
override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this }
4444

@@ -52,7 +52,7 @@ private class SummarizedCallableReversed extends SummarizedCallable {
5252
private class SummarizedCallableMap extends SummarizedCallable {
5353
SummarizedCallableMap() { this = "map" }
5454

55-
override Call getACall() { result.getFunc().(Name).getId() = this }
55+
override CallNode getACall() { result.getFunction().(NameNode).getId() = this }
5656

5757
override DataFlow::ArgumentNode getACallback() { result.asExpr().(Name).getId() = this }
5858

@@ -72,8 +72,8 @@ private class SummarizedCallableMap extends SummarizedCallable {
7272
private class SummarizedCallableJsonLoads extends SummarizedCallable {
7373
SummarizedCallableJsonLoads() { this = "json.loads" }
7474

75-
override Call getACall() {
76-
result = API::moduleImport("json").getMember("loads").getACall().asExpr()
75+
override CallNode getACall() {
76+
result = API::moduleImport("json").getMember("loads").getACall().getNode()
7777
}
7878

7979
override DataFlow::ArgumentNode getACallback() {

0 commit comments

Comments
 (0)