[ http://issues.apache.org/jira/browse/MODPYTHON-179?page=all ]
     
Nicolas Lehuen resolved MODPYTHON-179:
--------------------------------------

    Fix Version: 3.3
     Resolution: Fixed

Fixed and added two unit tests on the trunk. Apply revision #420288 if this 
needs to be backported on the 3.2 branch.

> 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
>     Assignee: Jim Gallacher
>     Priority: Minor
>      Fix For: 3.3

>
> 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

Reply via email to