File tree Expand file tree Collapse file tree 7 files changed +42
-1
lines changed
src/semmle/python/security
test/library-tests/taint/general Expand file tree Collapse file tree 7 files changed +42
-1
lines changed Original file line number Diff line number Diff line change @@ -148,6 +148,16 @@ abstract class TaintKind extends string {
148148 none ( )
149149 }
150150
151+ /** Gets the boolean values (may be one, neither, or both) that
152+ * may result from the Python expression `bool(this)`
153+ */
154+ boolean booleanValue ( ) {
155+ /* Default to true as the vast majority of taint is strings and
156+ * the empty string is almost always benign.
157+ */
158+ result = true
159+ }
160+
151161 string repr ( ) { result = this }
152162
153163}
@@ -1190,7 +1200,8 @@ library module TaintFlowImplementation {
11901200 sanitizer .sanitizingEdge ( kind , test )
11911201 )
11921202 |
1193- not Filters:: isinstance ( test .getTest ( ) , _, var .getSourceVariable ( ) .getAUse ( ) )
1203+ not Filters:: isinstance ( test .getTest ( ) , _, var .getSourceVariable ( ) .getAUse ( ) ) and
1204+ not test .getTest ( ) = var .getSourceVariable ( ) .getAUse ( )
11941205 or
11951206 exists ( ControlFlowNode c , ClassObject cls |
11961207 Filters:: isinstance ( test .getTest ( ) , c , var .getSourceVariable ( ) .getAUse ( ) )
@@ -1200,6 +1211,8 @@ library module TaintFlowImplementation {
12001211 or
12011212 test .getSense ( ) = false and not kind .getClass ( ) .getAnImproperSuperType ( ) = cls
12021213 )
1214+ or
1215+ test .getTest ( ) = var .getSourceVariable ( ) .getAUse ( ) and kind .booleanValue ( ) = test .getSense ( )
12031216 )
12041217 }
12051218
Original file line number Diff line number Diff line change 215215| Taint simple.test | test.py:169 | SOURCE | |
216216| Taint simple.test | test.py:172 | Subscript | |
217217| Taint simple.test | test.py:173 | Subscript | |
218+ | Taint simple.test | test.py:178 | SOURCE | |
219+ | Taint simple.test | test.py:179 | t | |
220+ | Taint simple.test | test.py:180 | t | |
221+ | Taint simple.test | test.py:183 | t | |
222+ | Taint simple.test | test.py:186 | t | |
218223| Taint {simple.test} | test.py:169 | Dict | |
219224| Taint {simple.test} | test.py:171 | d | |
220225| Taint {simple.test} | test.py:173 | y | |
Original file line number Diff line number Diff line change 3232| simple.test | test.py:159 | 160 | t | simple.test |
3333| simple.test | test.py:168 | 172 | Subscript | simple.test |
3434| simple.test | test.py:169 | 173 | Subscript | simple.test |
35+ | simple.test | test.py:178 | 180 | t | simple.test |
36+ | simple.test | test.py:178 | 186 | t | simple.test |
Original file line number Diff line number Diff line change 4040| test.py:163 | SOURCE | simple.test |
4141| test.py:168 | SOURCE | simple.test |
4242| test.py:169 | SOURCE | simple.test |
43+ | test.py:178 | SOURCE | simple.test |
Original file line number Diff line number Diff line change 173173| Taint simple.test | test.py:163 | SOURCE | | --> | Taint simple.test | test.py:164 | s | |
174174| Taint simple.test | test.py:168 | SOURCE | | --> | Taint [simple.test] | test.py:168 | List | |
175175| Taint simple.test | test.py:169 | SOURCE | | --> | Taint {simple.test} | test.py:169 | Dict | |
176+ | Taint simple.test | test.py:178 | SOURCE | | --> | Taint simple.test | test.py:179 | t | |
177+ | Taint simple.test | test.py:178 | SOURCE | | --> | Taint simple.test | test.py:180 | t | |
178+ | Taint simple.test | test.py:178 | SOURCE | | --> | Taint simple.test | test.py:183 | t | |
179+ | Taint simple.test | test.py:178 | SOURCE | | --> | Taint simple.test | test.py:186 | t | |
176180| Taint {simple.test} | test.py:169 | Dict | | --> | Taint {simple.test} | test.py:171 | d | |
177181| Taint {simple.test} | test.py:169 | Dict | | --> | Taint {simple.test} | test.py:175 | d | |
178182| Taint {simple.test} | test.py:171 | d | | --> | Taint {simple.test} | test.py:173 | y | |
Original file line number Diff line number Diff line change 177177| test.py:174 | l_2 | test.py:168 | Taint [simple.test] | List |
178178| test.py:175 | d2_0 | test.py:175 | Taint {simple.test} | dict() |
179179| test.py:175 | d_2 | test.py:169 | Taint {simple.test} | Dict |
180+ | test.py:178 | t_0 | test.py:178 | Taint simple.test | SOURCE |
181+ | test.py:180 | t_1 | test.py:178 | Taint simple.test | SOURCE |
182+ | test.py:180 | t_2 | test.py:178 | Taint simple.test | SOURCE |
183+ | test.py:183 | t_3 | test.py:178 | Taint simple.test | SOURCE |
184+ | test.py:186 | t_4 | test.py:178 | Taint simple.test | SOURCE |
Original file line number Diff line number Diff line change @@ -173,3 +173,14 @@ def test_update_extend(x, y):
173173 SINK (y ["key" ])
174174 l2 = list (l )
175175 d2 = dict (d )
176+
177+ def test_truth ():
178+ t = SOURCE
179+ if t :
180+ SINK (t )
181+ else :
182+ SINK (t )
183+ if not t :
184+ SINK (t )
185+ else :
186+ SINK (t )
You can’t perform that action at this time.
0 commit comments