(original) (raw)
diff -r 2c124e30a324 Lib/cgi.py --- a/Lib/cgi.py Fri Aug 07 00:43:39 2015 -0700 +++ b/Lib/cgi.py Fri Aug 07 11:10:46 2015 -0400 @@ -720,6 +720,11 @@ self.bytes_read += len(hdr_text) 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) diff -r 2c124e30a324 Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py Fri Aug 07 00:43:39 2015 -0700 +++ b/Lib/test/test_cgi.py Fri Aug 07 11:10:46 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, 'Larry') + def test_fieldstorage_as_context_manager(self): fp = BytesIO(b'x' * 10) env = {'REQUEST_METHOD': 'PUT'}