summaryrefslogtreecommitdiff
path: root/django/core/handlers/modpython.py
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-08-30 19:56:14 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-08-30 19:56:14 +0000
commit15644cb255f673c07d9bafc3595edaaa4cdc3a90 (patch)
tree1fa3fee74606b352a9eb73f9f08deb169411608a /django/core/handlers/modpython.py
parent7c65a316060f88a8604d51c7bc20945fae476c1a (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.py20
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()