Skip to content

Commit 01c1cca

Browse files
committed
Python: Implement new data flow interface
1 parent ef48466 commit 01c1cca

10 files changed

+20
-13
lines changed

python/ql/consistency-queries/DataFlowConsistency.ql

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ private import semmle.python.dataflow.new.internal.DataFlowDispatch
1010
private import semmle.python.dataflow.new.internal.TaintTrackingImplSpecific
1111
private import codeql.dataflow.internal.DataFlowImplConsistency
1212

13-
private module Input implements InputSig<PythonDataFlow> {
13+
private module Input implements InputSig<Location, PythonDataFlow> {
1414
private import Private
1515
private import Public
1616

1717
predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode }
1818

19+
predicate uniqueNodeLocationExclude(Node n) { n instanceof FlowSummaryNode }
20+
21+
predicate missingLocationExclude(Node n) { n instanceof FlowSummaryNode }
22+
1923
predicate argHasPostUpdateExclude(ArgumentNode n) {
2024
// TODO: Implement post-updates for *args, see tests added in https://github.com/github/codeql/pull/14936
2125
exists(ArgumentPosition apos | n.argumentOf(_, apos) and apos.isStarArgs(_))
@@ -132,4 +136,4 @@ private module Input implements InputSig<PythonDataFlow> {
132136
}
133137
}
134138

135-
import MakeConsistency<PythonDataFlow, PythonTaintTracking, Input>
139+
import MakeConsistency<Location, PythonDataFlow, PythonTaintTracking, Input>

python/ql/lib/semmle/python/dataflow/new/DataFlow.qll

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ private import python
2424
module DataFlow {
2525
private import internal.DataFlowImplSpecific
2626
private import codeql.dataflow.DataFlow
27-
import DataFlowMake<PythonDataFlow>
27+
import DataFlowMake<Location, PythonDataFlow>
2828
import internal.DataFlowImpl1
2929
}

python/ql/lib/semmle/python/dataflow/new/TaintTracking.qll

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ module TaintTracking {
1919
private import semmle.python.dataflow.new.internal.DataFlowImplSpecific
2020
private import semmle.python.dataflow.new.internal.TaintTrackingImplSpecific
2121
private import codeql.dataflow.TaintTracking
22-
import TaintFlowMake<PythonDataFlow, PythonTaintTracking>
22+
import TaintFlowMake<Location, PythonDataFlow, PythonTaintTracking>
2323
import internal.tainttracking1.TaintTrackingImpl
2424
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1595,7 +1595,7 @@ class FlowSummaryNode extends Node, TFlowSummaryNode {
15951595
override string toString() { result = this.getSummaryNode().toString() }
15961596

15971597
// Hack to return "empty location"
1598-
override predicate hasLocationInfo(
1598+
deprecated override predicate hasLocationInfo(
15991599
string file, int startline, int startcolumn, int endline, int endcolumn
16001600
) {
16011601
file = "" and
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
private import DataFlowImplSpecific
22
private import codeql.dataflow.internal.DataFlowImpl
3-
import MakeImpl<PythonDataFlow>
3+
private import semmle.python.Files
4+
import MakeImpl<Location, PythonDataFlow>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
private import DataFlowImplSpecific
22
private import codeql.dataflow.internal.DataFlowImplCommon
3-
import MakeImplCommon<PythonDataFlow>
3+
private import semmle.python.Files
4+
import MakeImplCommon<Location, PythonDataFlow>

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module Public {
1515
import DataFlowUtil
1616
}
1717

18-
module PythonDataFlow implements InputSig {
18+
module PythonDataFlow implements InputSig<Python::Location> {
1919
import Private
2020
import Public
2121

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ class Node extends TNode {
148148
DataFlowCallable getEnclosingCallable() { result = getCallableScope(this.getScope()) }
149149

150150
/** Gets the location of this node */
151+
cached
151152
Location getLocation() { none() }
152153

153154
/**
@@ -157,8 +158,7 @@ class Node extends TNode {
157158
* For more information, see
158159
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
159160
*/
160-
cached
161-
predicate hasLocationInfo(
161+
deprecated predicate hasLocationInfo(
162162
string filepath, int startline, int startcolumn, int endline, int endcolumn
163163
) {
164164
Stages::DataFlow::ref() and

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ private import DataFlowImplSpecific as DataFlowImplSpecific
99
private import DataFlowImplSpecific::Private
1010
private import DataFlowImplSpecific::Public
1111

12-
module Input implements InputSig<DataFlowImplSpecific::PythonDataFlow> {
12+
module Input implements InputSig<Location, DataFlowImplSpecific::PythonDataFlow> {
1313
class SummarizedCallableBase = string;
1414

1515
ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() }
@@ -83,7 +83,7 @@ module Input implements InputSig<DataFlowImplSpecific::PythonDataFlow> {
8383
}
8484
}
8585

86-
private import Make<DataFlowImplSpecific::PythonDataFlow, Input> as Impl
86+
private import Make<Location, DataFlowImplSpecific::PythonDataFlow, Input> as Impl
8787

8888
private module StepsInput implements Impl::Private::StepsInputSig {
8989
DataFlowCall getACall(Public::SummarizedCallable sc) {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
private import codeql.dataflow.TaintTracking
66
private import DataFlowImplSpecific
7+
private import semmle.python.Files
78

8-
module PythonTaintTracking implements InputSig<PythonDataFlow> {
9+
module PythonTaintTracking implements InputSig<Location, PythonDataFlow> {
910
import TaintTrackingPrivate
1011
}

0 commit comments

Comments
 (0)