Skip to content

Commit 1af0271

Browse files
committed
Fixed django#6170 -- Ensured that a useful exception is raised when a regex is invalid in the URLConf.
Thanks to abrahamson.j for the report, to guettli for initial work on the patch, and to David Gouldin for the new patch and test.
1 parent 9ecd978 commit 1af0271

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

django/core/urlresolvers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,16 @@ def regex(self):
160160
language_code = get_language()
161161
if language_code not in self._regex_dict:
162162
if isinstance(self._regex, basestring):
163-
compiled_regex = re.compile(self._regex, re.UNICODE)
163+
regex = self._regex
164164
else:
165165
regex = force_unicode(self._regex)
166+
try:
166167
compiled_regex = re.compile(regex, re.UNICODE)
168+
except re.error, e:
169+
raise ImproperlyConfigured(
170+
u'"%s" is not a valid regular expression: %s' %
171+
(regex, unicode(e)))
172+
167173
self._regex_dict[language_code] = compiled_regex
168174
return self._regex_dict[language_code]
169175

tests/regressiontests/urlpatterns_reverse/erroneous_urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111
url(r'uncallable/$', 'regressiontests.urlpatterns_reverse.views.uncallable'),
1212
# Module does not exist
1313
url(r'missing_outer/$', 'regressiontests.urlpatterns_reverse.missing_module.missing_view'),
14+
# Regex contains an error (refs #6170)
15+
url(r'(regex_error/$', 'regressiontestes.urlpatterns_reverse.views.empty_view'),
1416
)

tests/regressiontests/urlpatterns_reverse/tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,3 +511,11 @@ def test_erroneous_resolve(self):
511511
self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_outer/')
512512
self.assertRaises(ViewDoesNotExist, self.client.get, '/uncallable/')
513513

514+
def test_erroneous_reverse(self):
515+
"""
516+
Ensure that a useful exception is raised when a regex is invalid in the
517+
URLConf.
518+
Refs #6170.
519+
"""
520+
# The regex error will be hit before NoReverseMatch can be raised
521+
self.assertRaises(ImproperlyConfigured, reverse, 'whatever blah blah')

0 commit comments

Comments
 (0)