diff --git a/Lib/cgi.py b/Lib/cgi.py index 233a496..b44a6c3 100755 --- a/Lib/cgi.py +++ b/Lib/cgi.py @@ -721,10 +721,6 @@ class FieldStorage: parser.feed(hdr_text.decode(self.encoding, self.errors)) headers = parser.close() - # Some clients add Content-Length for part headers, ignore them - if 'content-length' in headers: - del headers['content-length'] - part = klass(self.fp, headers, ib, environ, keep_blank_values, strict_parsing,self.limit-self.bytes_read, self.encoding, self.errors) @@ -893,7 +889,7 @@ class FieldStorage: 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 --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py index 6373221..ce702da 100644 --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -343,7 +343,20 @@ Larry 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, 'Larry') + self.assertEqual(fs.list[0].value, b'Larry') + + def test_fieldstorage_not_multipart(self): + POSTDATA = b'{"name": "Bert"}' + + env = { + 'REQUEST_METHOD': 'POST', + 'CONTENT_TYPE': 'text/plain', + 'CONTENT_LENGTH': str(len(POSTDATA)) + } + fp = BytesIO(POSTDATA) + fs = cgi.FieldStorage(fp, environ=env) + self.assertEqual(fs.list, None) + self.assertEqual(fs.value, b'{"name": "Bert"}') def test_fieldstorage_as_context_manager(self): fp = BytesIO(b'x' * 10)