Skip to content

Commit f139271

Browse files
committed
Python: Add .copy() as a copy step
1 parent 5125973 commit f139271

File tree

3 files changed

+3
-11
lines changed

3 files changed

+3
-11
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ predicate copyStep(DataFlow::CfgNode nodeFrom, DataFlow::CfgNode nodeTo) {
195195
call = API::moduleImport("copy").getMember(["copy", "deepcopy"]).getACall() and
196196
call.getArg(0) = nodeFrom
197197
)
198+
or
199+
nodeTo.(DataFlow::MethodCallNode).calls(nodeFrom, "copy")
198200
}
199201

200202
/**

python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ edges
4040
| test.py:195:28:195:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | |
4141
| test.py:197:18:197:18 | ControlFlowNode for x | test.py:198:28:198:28 | ControlFlowNode for x | provenance | |
4242
| test.py:198:28:198:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | |
43-
| test.py:222:26:222:26 | ControlFlowNode for x | test.py:223:9:223:9 | ControlFlowNode for x | provenance | |
44-
| test.py:223:5:223:5 | ControlFlowNode for y | test.py:224:5:224:5 | ControlFlowNode for y | provenance | |
45-
| test.py:223:9:223:9 | ControlFlowNode for x | test.py:223:9:223:16 | ControlFlowNode for Attribute() | provenance | |
46-
| test.py:223:9:223:16 | ControlFlowNode for Attribute() | test.py:223:5:223:5 | ControlFlowNode for y | provenance | |
4743
nodes
4844
| test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l |
4945
| test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l |
@@ -111,11 +107,6 @@ nodes
111107
| test.py:195:28:195:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x |
112108
| test.py:197:18:197:18 | ControlFlowNode for x | semmle.label | ControlFlowNode for x |
113109
| test.py:198:28:198:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x |
114-
| test.py:222:26:222:26 | ControlFlowNode for x | semmle.label | ControlFlowNode for x |
115-
| test.py:223:5:223:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y |
116-
| test.py:223:9:223:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x |
117-
| test.py:223:9:223:16 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() |
118-
| test.py:224:5:224:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y |
119110
subpaths
120111
#select
121112
| test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | This expression mutates a $@. | test.py:2:12:2:12 | ControlFlowNode for l | default value |
@@ -147,4 +138,3 @@ subpaths
147138
| test.py:185:9:185:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:185:9:185:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value |
148139
| test.py:187:9:187:9 | ControlFlowNode for x | test.py:194:18:194:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:194:18:194:18 | ControlFlowNode for x | default value |
149140
| test.py:187:9:187:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value |
150-
| test.py:224:5:224:5 | ControlFlowNode for y | test.py:222:26:222:26 | ControlFlowNode for x | test.py:224:5:224:5 | ControlFlowNode for y | This expression mutates a $@. | test.py:222:26:222:26 | ControlFlowNode for x | default value |

python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,4 @@ def flow_through_deepcopy_fp(x=[]):
221221

222222
def flow_through_copy_fp(x=[]):
223223
y = x.copy()
224-
y.append(1) #$ SPURIOUS: modification=y
224+
y.append(1)

0 commit comments

Comments
 (0)