diff options
author | roger <rogerduran@gmail.com> | 2020-06-15 14:58:54 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-15 14:58:54 (GMT) |
commit | d8cf3514dd4682419a66f6e834bb384ee34afc95 (patch) | |
tree | ebd63ed920b856081da64cfd330e7d2e05fbc8b2 /Lib/cgi.py | |
parent | e2d47a0568c6da9229580829917fd6aa702133b3 (diff) | |
download | cpython-d8cf3514dd4682419a66f6e834bb384ee34afc95.zip cpython-d8cf3514dd4682419a66f6e834bb384ee34afc95.tar.gz cpython-d8cf3514dd4682419a66f6e834bb384ee34afc95.tar.bz2 |
bpo-34226: fix cgi.parse_multipart without content_length (GH-8530)
In Python 3.7 the behavior of parse_multipart changed requiring CONTENT-LENGTH
header, this fix remove this header as required and fix FieldStorage
read_lines_to_outerboundary, by not using limit when it's negative,
since by default it's -1 if not content-length and keeps substracting what
was read from the file object.
Also added a test case for this problem.
Diffstat (limited to 'Lib/cgi.py')
-rwxr-xr-x | Lib/cgi.py | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -200,7 +200,10 @@ def parse_multipart(fp, pdict, encoding="utf-8", errors="replace"): ctype = "multipart/form-data; boundary={}".format(boundary) headers = Message() headers.set_type(ctype) - headers['Content-Length'] = pdict['CONTENT-LENGTH'] + try: + headers['Content-Length'] = pdict['CONTENT-LENGTH'] + except KeyError: + pass fs = FieldStorage(fp, headers=headers, encoding=encoding, errors=errors, environ={'REQUEST_METHOD': 'POST'}) return {k: fs.getlist(k) for k in fs} @@ -736,7 +739,8 @@ class FieldStorage: last_line_lfend = True _read = 0 while 1: - if self.limit is not None and _read >= self.limit: + + if self.limit is not None and 0 <= self.limit <= _read: break line = self.fp.readline(1<<16) # bytes self.bytes_read += len(line) |