Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #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.
  • Loading branch information...
commit 1af0271d7c6f5ecda2247a2b363d25f493c7b05a 1 parent 9ecd978
Julien Phalip jphalip authored
8 django/core/urlresolvers.py
View
@@ -160,10 +160,16 @@ def regex(self):
language_code = get_language()
if language_code not in self._regex_dict:
if isinstance(self._regex, basestring):
- compiled_regex = re.compile(self._regex, re.UNICODE)
+ regex = self._regex
else:
regex = force_unicode(self._regex)
+ try:
compiled_regex = re.compile(regex, re.UNICODE)
+ except re.error, e:
Simon Charette Collaborator

Maybe we should use the except re.error as e syntax here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ raise ImproperlyConfigured(
+ u'"%s" is not a valid regular expression: %s' %
+ (regex, unicode(e)))
+
self._regex_dict[language_code] = compiled_regex
return self._regex_dict[language_code]
2  tests/regressiontests/urlpatterns_reverse/erroneous_urls.py
View
@@ -11,4 +11,6 @@
url(r'uncallable/$', 'regressiontests.urlpatterns_reverse.views.uncallable'),
# Module does not exist
url(r'missing_outer/$', 'regressiontests.urlpatterns_reverse.missing_module.missing_view'),
+ # Regex contains an error (refs #6170)
+ url(r'(regex_error/$', 'regressiontestes.urlpatterns_reverse.views.empty_view'),
)
8 tests/regressiontests/urlpatterns_reverse/tests.py
View
@@ -511,3 +511,11 @@ def test_erroneous_resolve(self):
self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_outer/')
self.assertRaises(ViewDoesNotExist, self.client.get, '/uncallable/')
+ def test_erroneous_reverse(self):
+ """
+ Ensure that a useful exception is raised when a regex is invalid in the
+ URLConf.
+ Refs #6170.
+ """
+ # The regex error will be hit before NoReverseMatch can be raised
+ self.assertRaises(ImproperlyConfigured, reverse, 'whatever blah blah')
Simon Charette

Maybe we should use the except re.error as e syntax here?

Please sign in to comment.
Something went wrong with that request. Please try again.