From 15644cb255f673c07d9bafc3595edaaa4cdc3a90 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Sat, 30 Aug 2008 19:56:14 +0000 Subject: 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 --- django/core/handlers/modpython.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'django/core/handlers/modpython.py') 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 = '' - try: - post = pformat(self.POST) - except: + if self._post_parse_error: post = '' + else: + try: + post = pformat(self.POST) + except: + post = '' 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() -- cgit v1.3