You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2015/07/01 02:20:00 UTC
svn commit: r1688538 - /httpd/httpd/trunk/modules/http/http_filters.c
Author: ylavic
Date: Wed Jul 1 00:19:59 2015
New Revision: 1688538
URL: http://svn.apache.org/r1688538
Log:
http: follow up to r1686271.
Be lenient up to 10 (room for 32bit decimals) Bad White Spaces (BWS)
between chunk-size and chunk-ext/CRLF.
Modified:
httpd/httpd/trunk/modules/http/http_filters.c
Modified: httpd/httpd/trunk/modules/http/http_filters.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/http_filters.c?rev=1688538&r1=1688537&r2=1688538&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http/http_filters.c (original)
+++ httpd/httpd/trunk/modules/http/http_filters.c Wed Jul 1 00:19:59 2015
@@ -63,6 +63,7 @@ typedef struct http_filter_ctx
apr_off_t limit;
apr_off_t limit_used;
apr_int32_t chunk_used;
+ apr_int32_t chunk_bws;
apr_int32_t chunkbits;
enum
{
@@ -133,6 +134,7 @@ static apr_status_t parse_chunk_size(htt
ctx->remaining = 0;
ctx->chunkbits = sizeof(apr_off_t) * 8;
ctx->chunk_used = 0;
+ ctx->chunk_bws = 0;
}
if (c == LF) {
@@ -164,7 +166,12 @@ static apr_status_t parse_chunk_size(htt
}
}
else if (c == ' ' || c == '\t') {
+ /* Be lenient up to 10 BWS (term from rfc7230 - 3.2.3).
+ */
ctx->state = BODY_CHUNK_CR;
+ if (++ctx->chunk_bws > 10) {
+ return APR_EINVAL;
+ }
}
else if (ctx->state == BODY_CHUNK_CR) {
/*