Issue 32029: cgi: TypeError when no argument string is found (original) (raw)

Consider the following code:

import cgi
from io import BytesIO

cgi.FieldStorage(BytesIO(b"{}"), environ={
    "REQUEST_METHOD": "POST",
    "CONTENT_TYPE": "application/json",
    "CONTENT_LENGTH": "14",
})

This will throw the following exception:

Traceback (most recent call last): File "foo.py", line 7, in "CONTENT_LENGTH": "14", File "/usr/lib/python3.6/cgi.py", line 561, in init self.read_single() File "/usr/lib/python3.6/cgi.py", line 740, in read_single self.read_binary() File "/usr/lib/python3.6/cgi.py", line 762, in read_binary self.file.write(data) TypeError: write() argument must be str, not bytes

Of course, the input does not contain any argument string to be parsed by FieldStorage. Nevertheless, a TypeError in a totally unrelated part of the code seems like a bug. In my opinion, FieldStorage should just remain empty in this case, or - at best - throw a ValueError with a sensible error message.