Skip to content

Commit 9763ec7

Browse files
committed
Python: Add tests for nested assignment
1 parent 9502756 commit 9763ec7

File tree

8 files changed

+60
-0
lines changed

8 files changed

+60
-0
lines changed

python/ql/test/library-tests/taint/general/Contexts.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
WARNING: Type CallContext has been deprecated and may be removed in future (Contexts.ql:6,6-17)
22
WARNING: Type CallContext has been deprecated and may be removed in future (Contexts.ql:7,14-25)
3+
| assignment.py:1 | p0 = simple.test | Function test |
4+
| assignment.py:1 | p1 = simple.test | Function test |
5+
| assignment.py:1 | p2 = simple.test | Function test |
36
| carrier.py:4 | p1 = explicit.carrier | Function __init__ |
47
| carrier.py:4 | p1 = simple.test | Function __init__ |
58
| carrier.py:10 | p0.attr = simple.test | Function get_attr |

python/ql/test/library-tests/taint/general/TestDefn.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
| assignment.py:5 | SOURCE | assignment.py:5 | Taint simple.test | a |
2+
| assignment.py:7 | a | assignment.py:7 | Taint simple.test | b |
3+
| assignment.py:13 | SOURCE | assignment.py:13 | Taint simple.test | t2 |
14
| carrier.py:4 | ParameterDefinition | carrier.py:4 | Taint explicit.carrier | arg |
25
| carrier.py:4 | ParameterDefinition | carrier.py:4 | Taint simple.test | arg |
36
| carrier.py:10 | ParameterDefinition | carrier.py:10 | Taint .attr = simple.test | self |

python/ql/test/library-tests/taint/general/TestSource.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
| assignment.py:5 | SOURCE | simple.test |
2+
| assignment.py:13 | SOURCE | simple.test |
13
| carrier.py:17 | SOURCE | simple.test |
24
| carrier.py:21 | TAINT_CARRIER_SOURCE | explicit.carrier |
35
| carrier.py:25 | SOURCE | simple.test |

python/ql/test/library-tests/taint/general/TestStep.expected

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
| scissors | rockpaperscissors.py:29 | SCISSORS | | --> | scissors | rockpaperscissors.py:31 | x | |
104104
| scissors | rockpaperscissors.py:30 | x | | --> | paper | rockpaperscissors.py:30 | Attribute() | |
105105
| scissors | rockpaperscissors.py:31 | x | | --> | scissors | rockpaperscissors.py:6 | arg | p0 = scissors |
106+
| sequence of simple.test | assignment.py:13 | Tuple | | --> | sequence of [simple.test] | assignment.py:13 | Tuple | |
106107
| sequence of simple.test | test.py:168 | List | | --> | sequence of simple.test | test.py:170 | l | |
107108
| sequence of simple.test | test.py:168 | List | | --> | sequence of simple.test | test.py:174 | l | |
108109
| sequence of simple.test | test.py:170 | SSA variable x | | --> | sequence of simple.test | test.py:172 | x | |
@@ -112,6 +113,13 @@
112113
| sequence of simple.test | test.py:208 | List | | --> | sequence of simple.test | test.py:209 | seq | |
113114
| sequence of simple.test | test.py:209 | seq | | --> | simple.test | test.py:209 | For | |
114115
| sequence of simple.test | test.py:213 | flow_in_generator() | | --> | simple.test | test.py:213 | For | |
116+
| simple.test | assignment.py:5 | SOURCE | | --> | sequence of simple.test | assignment.py:5 | Tuple | |
117+
| simple.test | assignment.py:5 | SOURCE | | --> | simple.test | assignment.py:6 | a | |
118+
| simple.test | assignment.py:5 | SOURCE | | --> | simple.test | assignment.py:7 | a | |
119+
| simple.test | assignment.py:7 | a | | --> | sequence of simple.test | assignment.py:7 | Tuple | |
120+
| simple.test | assignment.py:7 | a | | --> | simple.test | assignment.py:8 | b | |
121+
| simple.test | assignment.py:13 | SOURCE | | --> | sequence of simple.test | assignment.py:13 | Tuple | |
122+
| simple.test | assignment.py:13 | SOURCE | | --> | simple.test | assignment.py:14 | t2 | |
115123
| simple.test | carrier.py:4 | arg | p1 = simple.test | --> | simple.test | carrier.py:5 | arg | p1 = simple.test |
116124
| simple.test | carrier.py:17 | SOURCE | | --> | .attr = simple.test | carrier.py:17 | ImplicitCarrier() | |
117125
| simple.test | carrier.py:17 | SOURCE | | --> | simple.test | carrier.py:4 | arg | p1 = simple.test |
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
| assignment.py:6 | swap_taint | a | simple.test |
2+
| assignment.py:6 | swap_taint | b | NO TAINT |
3+
| assignment.py:8 | swap_taint | a | NO TAINT |
4+
| assignment.py:8 | swap_taint | b | simple.test |
5+
| assignment.py:14 | nested_assignment | s1 | NO TAINT |
6+
| assignment.py:14 | nested_assignment | s2 | NO TAINT |
7+
| assignment.py:14 | nested_assignment | t1 | NO TAINT |
8+
| assignment.py:14 | nested_assignment | t2 | simple.test |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import python
2+
import semmle.python.security.TaintTracking
3+
import TaintLib
4+
5+
from Call call, Expr arg, string taint_string
6+
where
7+
call.getLocation().getFile().getShortName() = "assignment.py" and
8+
call.getFunc().(Name).getId() = "test" and
9+
arg = call.getAnArg() and
10+
(
11+
not exists(TaintedNode tainted | tainted.getAstNode() = arg) and
12+
taint_string = "NO TAINT"
13+
or
14+
exists(TaintedNode tainted | tainted.getAstNode() = arg |
15+
taint_string = tainted.getTaintKind().toString()
16+
)
17+
)
18+
select arg.getLocation().toString(), call.getScope().(Function).getName(), arg.toString(), taint_string

python/ql/test/library-tests/taint/general/TestVar.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
| assignment.py:5 | a_0 | assignment.py:5 | Taint simple.test |
2+
| assignment.py:6 | a_1 | assignment.py:6 | Taint simple.test |
3+
| assignment.py:7 | b_1 | assignment.py:7 | Taint simple.test |
4+
| assignment.py:13 | t2_0 | assignment.py:13 | Taint simple.test |
15
| carrier.py:4 | arg_0 | carrier.py:4 | Taint explicit.carrier |
26
| carrier.py:4 | arg_0 | carrier.py:4 | Taint simple.test |
37
| carrier.py:5 | self_1 | carrier.py:5 | Taint .attr = explicit.carrier |
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
def test(*args):
2+
pass
3+
4+
def swap_taint():
5+
a, b = SOURCE, "safe"
6+
test(a, b)
7+
a, b = b, a
8+
test(a, b)
9+
10+
def nested_assignment():
11+
# A contrived example, that is a bit silly (and is not even iterable unpacking).
12+
# We do handle this case though.
13+
((t1, s1), t2, s2) = ((SOURCE, "safe"), SOURCE, "safe")
14+
test(t1, s1, t2, s2)

0 commit comments

Comments
 (0)