Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1e26dc7

Browse files
committed
(Merge 3.4) cgi.FieldStorage.read_multi ignores Content-Length
Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length header in part headers. Patch written by Peter Landry and reviewed by Pierre Quentel.
2 parents 8e205f7 + 6579459 commit 1e26dc7

4 files changed

Lines changed: 28 additions & 0 deletions

File tree

Lib/cgi.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,11 @@ def read_multi(self, environ, keep_blank_values, strict_parsing):
720720
self.bytes_read += len(hdr_text)
721721
parser.feed(hdr_text.decode(self.encoding, self.errors))
722722
headers = parser.close()
723+
724+
# Some clients add Content-Length for part headers, ignore them
725+
if 'content-length' in headers:
726+
del headers['content-length']
727+
723728
part = klass(self.fp, headers, ib, environ, keep_blank_values,
724729
strict_parsing,self.limit-self.bytes_read,
725730
self.encoding, self.errors)

Lib/test/test_cgi.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,24 @@ def test_fieldstorage_multipart_w3c(self):
326326
got = getattr(files[x], k)
327327
self.assertEqual(got, exp)
328328

329+
def test_fieldstorage_part_content_length(self):
330+
BOUNDARY = "JfISa01"
331+
POSTDATA = """--JfISa01
332+
Content-Disposition: form-data; name="submit-name"
333+
Content-Length: 5
334+
335+
Larry
336+
--JfISa01"""
337+
env = {
338+
'REQUEST_METHOD': 'POST',
339+
'CONTENT_TYPE': 'multipart/form-data; boundary={}'.format(BOUNDARY),
340+
'CONTENT_LENGTH': str(len(POSTDATA))}
341+
fp = BytesIO(POSTDATA.encode('latin-1'))
342+
fs = cgi.FieldStorage(fp, environ=env, encoding="latin-1")
343+
self.assertEqual(len(fs.list), 1)
344+
self.assertEqual(fs.list[0].name, 'submit-name')
345+
self.assertEqual(fs.list[0].value, 'Larry')
346+
329347
def test_fieldstorage_as_context_manager(self):
330348
fp = BytesIO(b'x' * 10)
331349
env = {'REQUEST_METHOD': 'PUT'}

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,7 @@ Thomas Lamb
795795
Valerie Lambert
796796
Jean-Baptiste "Jiba" Lamy
797797
Ronan Lamy
798+
Peter Landry
798799
Torsten Landschoff
799800
Łukasz Langa
800801
Tino Lange

Misc/NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ Core and Builtins
1616
Library
1717
-------
1818

19+
- Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length
20+
header in part headers. Patch written by Peter Landry and reviewed by Pierre
21+
Quentel.
22+
1923
- Issue #24774: Fix docstring in http.server.test. Patch from Chiu-Hsiang Hsu.
2024

2125
- Issue #21159: Improve message in configparser.InterpolationMissingOptionError.

0 commit comments

Comments
 (0)