• Guido van Rossum's avatar
    Solve SF bug #231249: cgi.py opens too many (temporary) files. · 52b8c29c
    Guido van Rossum yazdı
    class FieldStorage: this patch changes read_lines() and co. to use a
    StringIO() instead of a real file.  The write() calls are redirected
    to a private method that replaces it with a real, external file only
    when it gets too big (> 1000 bytes).
    
    This avoids problems in forms using the multipart/form-data encoding
    with many fields.  The original code created a temporary file for
    *every* field (not just for file upload fields), thereby sometimes
    exceeding the open file limit of some systems.
    
    Note that the simpler solution "use a real file only for file uploads"
    can't be used because the form field parser has no way to tell which
    fields correspond to file uploads.
    
    It's *possible* but extremely unlikely that this would break someone's
    code; they would have to be stepping way outside the documented
    interface for FieldStorage and use f.file.fileno(), or depend on
    overriding make_file() to return a file-like object with additional
    known properties.
    52b8c29c
cgi.py 32.1 KB