[Web-SIG] WSGI, cgi.FieldStorage incompatibility

James Y Knight foom at fuhm.net
Thu Oct 26 10:26:28 CEST 2006


On Sep 29, 2006, at 3:31 PM, Guido van Rossum wrote:

> On 9/29/06, Michael Kerrin <michael.kerrin at openapp.biz> wrote:
>>   But the current implementation of cgi.FieldStorage in the 2.4.4  
>> branch
>> and on Python 2.5 does call readline with the size argument. It has
>> started to do this in response to the Python bug #1112549 -
>> cgi.FieldStorage memory usage can spike in line-oriented ops. See
>> http://sourceforge.net/tracker/index.php? 
>> func=detail&aid=1112549&group_id=5470&atid=105470
>>
>>   Since it is reasonable for a WSGI application to use  
>> cgi.FieldStorage
>> I am wondering whether cgi.FieldStorage or the WSGI specification  
>> needs
>> to changed in order to solve this incompatibility.
>>
>>   Originally I thought it was cgi.FieldStorage that needs to be  
>> changed,
>> and hence tried to fix it by wrapping the input stream so that the
>> readline method always uses the read method on the input stream.  
>> While
>> this seems to work for me it introduces a level of complexity in the
>> cgi.py file, and possible some other bugs, that makes me think that
>> adding the size argument for readline into the WSGI specification  
>> isn't
>> such bad idea after all.
>
> Since that change to cgi.py was a security fix I would strongly
> recommend not to remove it and to change the WSGI spec instead.

Given that this change is now part of python 2.4.4 and python 2.5, it  
seems to me it is now a defacto requirement that all WSGI server  
implementations must support readline with a size argument in order  
to run any interesting software, despite the spec explicitly saying  
that you shouldn't. I suspect simply modifying the spec to follow the  
current reality would be the least bad option.

But this kind of destabilizing breakage really shouldn't be allowed  
to happen again. Once the error was discovered, the cgi.py change  
should have been immediately reverted until either a decision was  
made to change the WSGI spec, or else the change fixed to not break  
WSGI compliant servers. This limbo situation is pretty bad.

James



More information about the Web-SIG mailing list