Ooh! Great catch. Thanks for putting that back. On Sat, Nov 14, 2015 at 8:34 AM, <[email protected]> wrote:
> Author: rhuijben > Date: Sat Nov 14 14:34:38 2015 > New Revision: 1714338 > > URL: http://svn.apache.org/viewvc?rev=1714338&view=rev > Log: > Reinstate the optimization for explicit CRLF, removed in r1713955 > with a comment explaining this very specific case. > > * buckets/buckets.c > (serf_bucket_limited_readline): Reinstate CRLF optimization. Fix > the ugly corner case where somebody tries to read a line of > 0 or 1 bytes. > > Modified: > serf/trunk/buckets/buckets.c > > Modified: serf/trunk/buckets/buckets.c > URL: > http://svn.apache.org/viewvc/serf/trunk/buckets/buckets.c?rev=1714338&r1=1714337&r2=1714338&view=diff > > ============================================================================== > --- serf/trunk/buckets/buckets.c (original) > +++ serf/trunk/buckets/buckets.c Sat Nov 14 14:34:38 2015 > @@ -151,8 +151,18 @@ apr_status_t serf_bucket_limited_readlin > > For example, if we tried reading 2 characters seeking CRLF, and > got CR followed by 'a', then we have over-read the line, and > - consumed a character from the next line. Bad. */ > - requested = 1; > + consumed a character from the next line. Bad. > + > + The only exception is when we *only* allow CRLF as newline. In > that > + case CR followed by 'a' would just be raw line data, not a line > + break followed by data. If we allow any other type of newline > we > + can't use this trick. > + */ > + > + if ((acceptable & SERF_NEWLINE_ANY) == SERF_NEWLINE_CRLF) > + requested = MIN(requested, 2); /* Only CRLF is allowed */ > + else > + requested = MIN(requested, 1); > } > else { > /* peek_len > 0 */ > > >
