From c906b270f5bc53d9657c5f0bdb98a3015c9f8c71 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Thu, 4 Nov 2010 12:03:38 +0000 Subject: [PATCH] Fixed #14602 -- Added an extra check to wsgi.input handling to prevent AppEngine from choking. Thanks to Waldemar Kornewald for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14453 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/handlers/wsgi.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 7e5a6552fd..d3632c77ed 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -134,7 +134,7 @@ class WSGIRequest(http.HttpRequest): self.META['SCRIPT_NAME'] = script_name self.method = environ['REQUEST_METHOD'].upper() self._post_parse_error = False - if isinstance(self.environ['wsgi.input'], socket._fileobject): + if type(socket._fileobject) is type and isinstance(self.environ['wsgi.input'], socket._fileobject): # Under development server 'wsgi.input' is an instance of # socket._fileobject which hangs indefinitely on reading bytes past # available count. To prevent this it's wrapped in LimitedStream @@ -144,6 +144,9 @@ class WSGIRequest(http.HttpRequest): # streams) beacuse they don't suffer from this problem and we can # avoid using another wrapper with its own .read and .readline # implementation. + # + # The type check is done because for some reason, AppEngine + # implements _fileobject as a function, not a class. try: content_length = int(self.environ.get('CONTENT_LENGTH', 0)) except (ValueError, TypeError):