From 75485d16a289c1fc4eb39702c14d2f08f0d8ccce Mon Sep 17 00:00:00 2001 From: mendespedro Date: Fri, 10 Dec 2021 19:23:54 -0300 Subject: [PATCH] Fixed #33351 -- Made path()/re_path() raise TypeError when kwargs argument is not a dict. --- django/urls/conf.py | 4 ++++ tests/urlpatterns/tests.py | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/django/urls/conf.py b/django/urls/conf.py index b3937d5512..40990d10f5 100644 --- a/django/urls/conf.py +++ b/django/urls/conf.py @@ -57,6 +57,10 @@ def include(arg, namespace=None): def _path(route, view, kwargs=None, name=None, Pattern=None): from django.views import View + if kwargs is not None and not isinstance(kwargs, dict): + raise TypeError( + f'kwargs argument must be a dict, but got {kwargs.__class__.__name__}.' + ) if isinstance(view, (list, tuple)): # For include(...) processing. pattern = Pattern(route, is_endpoint=False) diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py index cf942fe72b..262cb2e11e 100644 --- a/tests/urlpatterns/tests.py +++ b/tests/urlpatterns/tests.py @@ -4,7 +4,9 @@ import uuid from django.core.exceptions import ImproperlyConfigured from django.test import SimpleTestCase from django.test.utils import override_settings -from django.urls import NoReverseMatch, Resolver404, path, resolve, reverse +from django.urls import ( + NoReverseMatch, Resolver404, path, re_path, resolve, reverse, +) from django.views import View from .converters import DynamicConverter @@ -137,6 +139,13 @@ class SimplifiedURLTests(SimpleTestCase): url = reverse('inner-extra', kwargs={'extra': 'something'}) self.assertEqual(url, '/included_urls/extra/something/') + def test_invalid_kwargs(self): + msg = 'kwargs argument must be a dict, but got str.' + with self.assertRaisesMessage(TypeError, msg): + path('hello/', empty_view, 'name') + with self.assertRaisesMessage(TypeError, msg): + re_path('^hello/$', empty_view, 'name') + def test_invalid_converter(self): msg = "URL route 'foo//' uses invalid converter 'nonexistent'." with self.assertRaisesMessage(ImproperlyConfigured, msg):