diff -r 9e3be159d023 Lib/cgi.py --- a/Lib/cgi.py Fri Jul 31 07:58:56 2015 -0700 +++ b/Lib/cgi.py Fri Jul 31 12:04:41 2015 -0400 @@ -888,7 +888,7 @@ which unlinks the temporary files you have created. """ - if self._binary_file: + if self._binary_file or self.length >= 0: return tempfile.TemporaryFile("wb+") else: return tempfile.TemporaryFile("w+", diff -r 9e3be159d023 Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py Fri Jul 31 07:58:56 2015 -0700 +++ b/Lib/test/test_cgi.py Fri Jul 31 12:04:41 2015 -0400 @@ -326,6 +326,24 @@ got = getattr(files[x], k) self.assertEqual(got, exp) + def test_fieldstorage_part_content_length(self): + BOUNDARY = "JfISa01" + POSTDATA = """--JfISa01 +Content-Disposition: form-data; name="submit-name" +Content-Length: 5 + +Larry +--JfISa01""" + env = { + 'REQUEST_METHOD': 'POST', + 'CONTENT_TYPE': 'multipart/form-data; boundary={}'.format(BOUNDARY), + 'CONTENT_LENGTH': str(len(POSTDATA))} + fp = BytesIO(POSTDATA.encode('latin-1')) + fs = cgi.FieldStorage(fp, environ=env, encoding="latin-1") + self.assertEqual(len(fs.list), 1) + self.assertEqual(fs.list[0].name, 'submit-name') + self.assertEqual(fs.list[0].value, b'Larry') + def test_fieldstorage_as_context_manager(self): fp = BytesIO(b'x' * 10) env = {'REQUEST_METHOD': 'PUT'}