You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@serf.apache.org by rh...@apache.org on 2015/11/14 15:34:38 UTC

svn commit: r1714338 - /serf/trunk/buckets/buckets.c

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



Re: svn commit: r1714338 - /serf/trunk/buckets/buckets.c

Posted by Greg Stein <gs...@gmail.com>.
Ooh! Great catch. Thanks for putting that back.

On Sat, Nov 14, 2015 at 8:34 AM, <rh...@apache.org> 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  */
>
>
>