Python: Add taint test for os.path.join

Surprisingly the first two just worked, due to our very general handling of any
`join` methods :D
This commit is contained in:
Rasmus Wriedt Larsen
2020-09-30 11:16:15 +02:00
parent aa6fad558c
commit efa2484718
3 changed files with 16 additions and 1 deletions

View File

@@ -101,7 +101,7 @@ predicate stringManipulation(DataFlow::CfgNode nodeFrom, DataFlow::CfgNode nodeT
nodeFrom.getNode() = object and
method_name in ["partition", "rpartition", "rsplit", "split", "splitlines"]
or
// List[str] -> str
// Iterable[str] -> str
// TODO: check if these should be handled differently in regards to content
method_name = "join" and
nodeFrom.getNode() = call.getArg(0)

View File

@@ -137,6 +137,9 @@
| test_string.py:143 | fail | binary_decode_encode | base64.decodestring(..) |
| test_string.py:148 | fail | binary_decode_encode | quopri.encodestring(..) |
| test_string.py:149 | fail | binary_decode_encode | quopri.decodestring(..) |
| test_string.py:158 | ok | test_os_path_join | os.path.join(..) |
| test_string.py:159 | ok | test_os_path_join | os.path.join(..) |
| test_string.py:160 | fail | test_os_path_join | os.path.join(..) |
| test_unpacking.py:16 | ok | unpacking | a |
| test_unpacking.py:16 | ok | unpacking | b |
| test_unpacking.py:16 | ok | unpacking | c |

View File

@@ -150,6 +150,17 @@ def binary_decode_encode():
)
def test_os_path_join():
import os
print("\n# test_os_path_join")
ts = TAINTED_STRING
ensure_tainted(
os.path.join(ts, "foo", "bar"),
os.path.join(ts),
os.path.join("foo", "bar", ts),
)
# Make tests runable
str_operations()
@@ -157,3 +168,4 @@ str_methods()
non_syntactic()
percent_fmt()
binary_decode_encode()
test_os_path_join()