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