Python: Add a few taint tests for default sanitizer

specifically the ones removes from dataflow tests in https://github.com/yoff/codeql/pull/1
This commit is contained in:
Rasmus Wriedt Larsen
2020-09-02 16:56:05 +02:00
parent 8e86d56bce
commit bf34b07605
3 changed files with 44 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
| test.py:16 | fail | const_eq_clears_taint | ts |
| test.py:18 | ok | const_eq_clears_taint | ts |
| test.py:24 | fail | const_eq_clears_taint2 | ts |
| test.py:29 | ok | non_const_eq_preserves_taint | ts |
| test.py:31 | ok | non_const_eq_preserves_taint | ts |

View File

@@ -0,0 +1 @@
import experimental.dataflow.tainttracking.TestTaintLib

View File

@@ -0,0 +1,38 @@
# Add taintlib to PATH so it can be imported during runtime without any hassle
import sys; import os; sys.path.append(os.path.dirname(os.path.dirname((__file__))))
from taintlib import *
# This has no runtime impact, but allows autocomplete to work
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ..taintlib import *
# Actual tests
def const_eq_clears_taint():
ts = TAINTED_STRING
if ts == "safe":
ensure_not_tainted(ts)
# ts should still be tainted after exiting the if block
ensure_tainted(ts)
def const_eq_clears_taint2():
ts = TAINTED_STRING
if ts != "safe":
return
ensure_not_tainted(ts)
def non_const_eq_preserves_taint(x="foo"):
ts = TAINTED_STRING
if ts == ts:
ensure_tainted(ts)
if ts == x:
ensure_tainted(ts)
# Make tests runable
const_eq_clears_taint()
const_eq_clears_taint2()
non_const_eq_preserves_taint()