req.readlines(sizehint) does not work correctly -----------------------------------------------
Key: MODPYTHON-179 URL: http://issues.apache.org/jira/browse/MODPYTHON-179 Project: mod_python Type: Bug Components: core Versions: 3.2.8 Environment: All Reporter: Jim Gallacher Assigned to: Jim Gallacher Priority: Minor A bug in req_readlines(sizehint) in requestobject.c causes output to be returned prematurely for any value of the optional sizehint argument. The faulty bit of code is: line = req_readline(self, rlargs); while (line && (PyString_Size(line)>0)) { PyList_Append(result, line); size += PyString_Size(line); if ((sizehint != -1) && (size >= size)) break; line = req_readline(self, args); } Since (size >= size) will always be true, reading the input stream will end prematurely for any value of sizehint != -1. This code will fix the problem. --- requestobject.c (revision 417294) +++ requestobject.c (working copy) @@ -1154,7 +1154,7 @@ while (line && (PyString_Size(line)>0)) { PyList_Append(result, line); size += PyString_Size(line); - if ((sizehint != -1) && (size >= size)) + if ((sizehint != -1) && (size >= sizehint)) break; line = req_readline(self, args); } Once that is fixed the documentation needs to be revised, as it does not accurately reflect the behaviour of the code. Currently the docs are: """Reads all or up to sizehint bytes of lines using readline and returns a list of the lines read.""" whereas the code can read beyond sizehint. The total read could actually be sizehint + len(line) where line is the last line read. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira