Skip to content

Commit 94d23f3

Browse files
committed
Python: Also do all field-flow tests in global scope
Notice that these tests don't pass, to show how they differ in the next commit!
1 parent 2da4b39 commit 94d23f3

File tree

1 file changed

+109
-1
lines changed
  • python/ql/test/experimental/dataflow/fieldflow

1 file changed

+109
-1
lines changed

python/ql/test/experimental/dataflow/fieldflow/test.py

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def test_nested_obj_method():
161161
SINK(a.obj.foo) # $ MISSING: flow
162162

163163
# ------------------------------------------------------------------------------
164-
# In global scope
164+
# Global scope
165165
# ------------------------------------------------------------------------------
166166

167167
def func_defined_before():
@@ -178,3 +178,111 @@ def func_defined_after():
178178
def test_global_funcs():
179179
func_defined_before()
180180
func_defined_after()
181+
182+
# ------------------------------------------------------------------------------
183+
# All the other tests, but also in global scope.
184+
#
185+
# You might think that these are just the same... but it turns out they are not :O
186+
# ------------------------------------------------------------------------------
187+
188+
189+
myobj = MyObj("OK")
190+
191+
setFoo(myobj, SOURCE)
192+
SINK(myobj.foo) # $ flow="SOURCE, l:-1 -> myobj.foo"
193+
194+
195+
196+
myobj = MyObj("OK")
197+
198+
myobj.setFoo(SOURCE)
199+
SINK(myobj.foo) # $ MISSING: flow
200+
201+
202+
203+
myobj = MyObj(NONSOURCE)
204+
myobj.foo = SOURCE
205+
SINK(myobj.foo) # $ flow="SOURCE, l:-1 -> myobj.foo"
206+
207+
208+
209+
myobj = MyObj(NONSOURCE)
210+
myobj.foo = SOURCE
211+
myobj.foo = NONSOURCE
212+
SINK_F(myobj.foo)
213+
214+
215+
216+
myobj = MyObj(NONSOURCE)
217+
myobj.foo = SOURCE
218+
if cond:
219+
myobj.foo = NONSOURCE
220+
SINK_F(myobj.foo)
221+
SINK(myobj.foo) # $ flow="SOURCE, l:-4 -> myobj.foo"
222+
223+
224+
225+
myobj = MyObj(NONSOURCE)
226+
myobj.foo = SOURCE
227+
if cond:
228+
myobj.foo = NONSOURCE
229+
SINK_F(myobj.foo)
230+
else:
231+
myobj.foo = NONSOURCE
232+
SINK_F(myobj.foo)
233+
SINK_F(myobj.foo)
234+
235+
236+
237+
myobj = MyObj(NONSOURCE)
238+
myobj.foo = SOURCE
239+
SINK(getattr(myobj, "foo")) # $ flow="SOURCE, l:-1 -> getattr(..)"
240+
241+
242+
243+
myobj = MyObj(NONSOURCE)
244+
setattr(myobj, "foo", SOURCE)
245+
SINK(myobj.foo) # $ flow="SOURCE, l:-1 -> myobj.foo"
246+
247+
248+
249+
myobj = MyObj(NONSOURCE)
250+
setattr(myobj, "foo", SOURCE)
251+
SINK(getattr(myobj, "foo")) # $ flow="SOURCE, l:-1 -> getattr(..)"
252+
253+
254+
255+
myobj = MyObj(NONSOURCE)
256+
setattr(myobj, "foo", SOURCE)
257+
setattr(myobj, "foo", NONSOURCE)
258+
SINK_F(getattr(myobj, "foo"))
259+
260+
261+
262+
obj = MyObj(SOURCE)
263+
SINK(obj.foo) # $ flow="SOURCE, l:-1 -> obj.foo"
264+
265+
266+
267+
obj = MyObj(foo=SOURCE)
268+
SINK(obj.foo) # $ flow="SOURCE, l:-1 -> obj.foo"
269+
270+
271+
SINK(fields_with_local_flow(SOURCE)) # $ flow="SOURCE -> fields_with_local_flow(..)"
272+
273+
# ------------------------------------------------------------------------------
274+
# Nested Object
275+
# ------------------------------------------------------------------------------
276+
277+
278+
x = SOURCE
279+
a = NestedObj()
280+
a.obj.foo = x
281+
SINK(a.obj.foo) # $ flow="SOURCE, l:-3 -> a.obj.foo"
282+
283+
284+
285+
x = SOURCE
286+
a = NestedObj()
287+
a.getObj().foo = x
288+
SINK(a.obj.foo) # $ MISSING: flow

0 commit comments

Comments
 (0)