diff options
| author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-30 19:56:14 +0000 |
|---|---|---|
| committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-30 19:56:14 +0000 |
| commit | 15644cb255f673c07d9bafc3595edaaa4cdc3a90 (patch) | |
| tree | 1fa3fee74606b352a9eb73f9f08deb169411608a /django/core/handlers/modpython.py | |
| parent | 7c65a316060f88a8604d51c7bc20945fae476c1a (diff) | |
Fixed #8622: accessing POST after a POST handling exception no longer throws the server into an infinite loop. Thanks to vung for tracking this one down and fixing it.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8748 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/handlers/modpython.py')
| -rw-r--r-- | django/core/handlers/modpython.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index aa3fb23e39..8a5dba99a5 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -35,6 +35,7 @@ class ModPythonRequest(http.HttpRequest): # a common start character for URL patterns. So this is a little # naughty, but also pretty harmless. self.path_info = u'/' + self._post_parse_error = False def __repr__(self): # Since this is called as part of error handling, we need to be very @@ -43,10 +44,13 @@ class ModPythonRequest(http.HttpRequest): get = pformat(self.GET) except: get = '<could not parse>' - try: - post = pformat(self.POST) - except: + if self._post_parse_error: post = '<could not parse>' + else: + try: + post = pformat(self.POST) + except: + post = '<could not parse>' try: cookies = pformat(self.COOKIES) except: @@ -73,7 +77,15 @@ class ModPythonRequest(http.HttpRequest): "Populates self._post and self._files" if 'content-type' in self._req.headers_in and self._req.headers_in['content-type'].startswith('multipart'): self._raw_post_data = '' - self._post, self._files = self.parse_file_upload(self.META, self._req) + try: + self._post, self._files = self.parse_file_upload(self.META, self._req) + except: + # See django.core.handlers.wsgi.WSGIHandler for an explanation + # of what's going on here. + self._post = http.QueryDict('') + self._files = datastructures.MultiValueDict() + self._post_parse_error = True + raise else: self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict() |
