From c40f715257b6268cfd96dbafa18e58cbc6602afa Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Fri, 8 May 2009 17:22:34 +0000 Subject: [PATCH] Fixed #10687: fixed request parsing when upload_handlers is empty. Thanks, Armin Ronacher. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10723 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/files/base.py | 1 - django/http/multipartparser.py | 3 ++- tests/regressiontests/file_uploads/tests.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/django/core/files/base.py b/django/core/files/base.py index 9013acf2cc..f9e1c9a0d7 100644 --- a/django/core/files/base.py +++ b/django/core/files/base.py @@ -1,5 +1,4 @@ import os - try: from cStringIO import StringIO except ImportError: diff --git a/django/http/multipartparser.py b/django/http/multipartparser.py index 048c9aaea2..e45d5d1035 100644 --- a/django/http/multipartparser.py +++ b/django/http/multipartparser.py @@ -84,7 +84,8 @@ class MultiPartParser(object): # For compatibility with low-level network APIs (with 32-bit integers), # the chunk size should be < 2^31, but still divisible by 4. - self._chunk_size = min(2**31-4, *[x.chunk_size for x in upload_handlers if x.chunk_size]) + possible_sizes = [x.chunk_size for x in upload_handlers if x.chunk_size] + self._chunk_size = min([2**31-4] + possible_sizes) self._meta = META self._encoding = encoding or settings.DEFAULT_CHARSET diff --git a/tests/regressiontests/file_uploads/tests.py b/tests/regressiontests/file_uploads/tests.py index 639ee84cd2..1395cb23ea 100644 --- a/tests/regressiontests/file_uploads/tests.py +++ b/tests/regressiontests/file_uploads/tests.py @@ -3,12 +3,14 @@ import os import errno import shutil import unittest +from StringIO import StringIO from django.core.files import temp as tempfile from django.core.files.uploadedfile import SimpleUploadedFile from django.test import TestCase, client from django.utils import simplejson from django.utils.hashcompat import sha_constructor +from django.http.multipartparser import MultiPartParser from models import FileModel, temp_storage, UPLOAD_TO import uploadhandler @@ -290,3 +292,13 @@ class DirectoryCreationTests(unittest.TestCase): "%s exists and is not a directory." % UPLOAD_TO) except: self.fail("IOError not raised") + +class MultiParserTests(unittest.TestCase): + + def test_empty_upload_handlers(self): + # We're not actually parsing here; just checking if the parser properly + # instantiates with empty upload handlers. + parser = MultiPartParser({ + 'CONTENT_TYPE': 'multipart/form-data; boundary=_foo', + 'CONTENT_LENGTH': '1' + }, StringIO('x'), [], 'utf-8')