From dda29e99b24bd681ab90c82b69f478843f14afcb Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 7 Mar 2023 13:28:48 +0100 Subject: [PATCH] Python: Add test of keyword argument with same name as positional-only parameter This is a bit of an edge case, but allowed. Since we currently don't provide information on positional only arguments, we can't do much to solve it right now. --- .../dataflow/coverage/argumentPassing.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/python/ql/test/experimental/dataflow/coverage/argumentPassing.py b/python/ql/test/experimental/dataflow/coverage/argumentPassing.py index 35695b01f03..b547bd83f95 100644 --- a/python/ql/test/experimental/dataflow/coverage/argumentPassing.py +++ b/python/ql/test/experimental/dataflow/coverage/argumentPassing.py @@ -204,6 +204,18 @@ def test_mixed(): mixed(**args) +def kwargs_same_name_as_positional_only(a, /, **kwargs): + SINK1(a) + SINK2(kwargs["a"]) + +@expects(2*2) +def test_kwargs_same_name_as_positional_only(): + kwargs_same_name_as_positional_only(arg1, a=arg2) # $ arg1 SPURIOUS: bad1="arg2" MISSING: arg2 + + kwargs = {"a": arg2} # $ func=kwargs_same_name_as_positional_only SPURIOUS: bad1="arg2" MISSING: arg2 + kwargs_same_name_as_positional_only(arg1, **kwargs) # $ arg1 + + def starargs_only(*args): SINK1(args[0]) SINK2(args[1])