diff --git a/python/ql/src/experimental/dataflow/internal/DataFlowPrivate.qll b/python/ql/src/experimental/dataflow/internal/DataFlowPrivate.qll index e1d111753b9..fbfc4bdb5e2 100644 --- a/python/ql/src/experimental/dataflow/internal/DataFlowPrivate.qll +++ b/python/ql/src/experimental/dataflow/internal/DataFlowPrivate.qll @@ -292,7 +292,7 @@ private Node update(Node node) { * `y`. There is a dataflow step from `**{"y": 1, "a": 3}` to `[**d]` to transfer the content and * a clearing of content at key `y` for node `[**d]`, since that value has been unpacked. */ -private module ArgumentPassing { +module ArgumentPassing { /** * Holds if `call` represents a `DataFlowCall` to a `DataFlowCallable` represented by `callable`. * diff --git a/python/ql/src/experimental/dataflow/internal/DataFlowPublic.qll b/python/ql/src/experimental/dataflow/internal/DataFlowPublic.qll index 10d489953ce..e0c6248b590 100644 --- a/python/ql/src/experimental/dataflow/internal/DataFlowPublic.qll +++ b/python/ql/src/experimental/dataflow/internal/DataFlowPublic.qll @@ -49,6 +49,7 @@ newtype TNode = TKwOverflowNode(CallNode call, CallableValue callable) { exists(getKeywordOverflowArg(call, callable, _)) or + ArgumentPassing::connects(call, callable) and exists(call.getNode().getKwargs()) and callable.getScope().hasKwArg() } or