File tree Expand file tree Collapse file tree
lib/semmle/python/dataflow/new/internal
test/experimental/dataflow/fieldflow Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1973,6 +1973,18 @@ predicate clearsContent(Node n, Content c) {
19731973 kwOverflowClearStep ( n , c )
19741974 or
19751975 matchClearStep ( n , c )
1976+ or
1977+ attributeClearStep ( n , c )
1978+ }
1979+
1980+ /**
1981+ * Holds if values stored inside attribute `c` are cleared at node `n`.
1982+ *
1983+ * In `obj.foo = x` the any old value stored in `foo` is cleared at the pre-update node
1984+ * associated with `obj`
1985+ */
1986+ predicate attributeClearStep ( Node n , AttributeContent c ) {
1987+ exists ( PostUpdateNode post | post .getPreUpdateNode ( ) = n | attributeStoreStep ( _, c , post ) )
19761988}
19771989
19781990//--------
Original file line number Diff line number Diff line change @@ -67,15 +67,15 @@ def test_direct_assign_overwrite():
6767 myobj = MyObj (NONSOURCE )
6868 myobj .foo = SOURCE
6969 myobj .foo = NONSOURCE
70- SINK_F (myobj .foo ) # $ SPURIOUS: flow="SOURCE, l:-2 -> myobj.foo"
70+ SINK_F (myobj .foo )
7171
7272
7373def test_direct_if_assign (cond = False ):
7474 myobj = MyObj (NONSOURCE )
7575 myobj .foo = SOURCE
7676 if cond :
7777 myobj .foo = NONSOURCE
78- SINK_F (myobj .foo ) # $ SPURIOUS: flow="SOURCE, l:-3 -> myobj.foo"
78+ SINK_F (myobj .foo )
7979 SINK (myobj .foo ) # $ flow="SOURCE, l:-4 -> myobj.foo"
8080
8181
@@ -85,11 +85,11 @@ def test_direct_if_always_assign(cond = True):
8585 myobj .foo = SOURCE
8686 if cond :
8787 myobj .foo = NONSOURCE
88- SINK_F (myobj .foo ) # $ SPURIOUS: flow="SOURCE, l:-3 -> myobj.foo"
88+ SINK_F (myobj .foo )
8989 else :
9090 myobj .foo = NONSOURCE
91- SINK_F (myobj .foo ) # $ SPURIOUS: flow="SOURCE, l:-6 -> myobj.foo"
92- SINK_F (myobj .foo ) # $ SPURIOUS: flow="SOURCE, l:-7 -> myobj.foo"
91+ SINK_F (myobj .foo )
92+ SINK_F (myobj .foo )
9393
9494
9595def test_getattr ():
You can’t perform that action at this time.
0 commit comments