aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-05-14 14:49:53 +0300
committerRoman Arutyunyan <arut@nginx.com>2020-05-14 14:49:53 +0300
commitd69f678e9c788e2c2424eb6dc2fbacf8366213f6 (patch)
tree5cfae70c92cf203dd8c0bbff5655f445aa22e364 /src
parent1c54340e0aa65781f6cd4cc643f704826c47459a (diff)
downloadnginx-d69f678e9c788e2c2424eb6dc2fbacf8366213f6.tar.gz
nginx-d69f678e9c788e2c2424eb6dc2fbacf8366213f6.zip
HTTP/3: move body parser call out of ngx_http_parse_chunked().
The function ngx_http_parse_chunked() is also called from the proxy module to parse the upstream response. It should always parse HTTP/1 body in this case.
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_parse.c6
-rw-r--r--src/http/ngx_http_request_body.c22
2 files changed, 20 insertions, 8 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index 92bcf12ad..f66593443 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -2185,12 +2185,6 @@ ngx_http_parse_chunked(ngx_http_request_t *r, ngx_buf_t *b,
sw_trailer_header_almost_done
} state;
-#if (NGX_HTTP_V3)
- if (r->http_version == NGX_HTTP_VERSION_30) {
- return ngx_http_v3_parse_request_body(r, b, ctx);
- }
-#endif
-
state = ctx->state;
if (state == sw_chunk_data && ctx->size == 0) {
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
index b07d8562f..568f11f02 100644
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -735,7 +735,16 @@ ngx_http_discard_request_body_filter(ngx_http_request_t *r, ngx_buf_t *b)
for ( ;; ) {
- rc = ngx_http_parse_chunked(r, b, rb->chunked);
+ switch (r->http_version) {
+#if (NGX_HTTP_V3)
+ case NGX_HTTP_VERSION_30:
+ rc = ngx_http_v3_parse_request_body(r, b, rb->chunked);
+ break;
+#endif
+
+ default: /* HTTP/1.x */
+ rc = ngx_http_parse_chunked(r, b, rb->chunked);
+ }
if (rc == NGX_OK) {
@@ -978,7 +987,16 @@ ngx_http_request_body_chunked_filter(ngx_http_request_t *r, ngx_chain_t *in)
cl->buf->file_pos,
cl->buf->file_last - cl->buf->file_pos);
- rc = ngx_http_parse_chunked(r, cl->buf, rb->chunked);
+ switch (r->http_version) {
+#if (NGX_HTTP_V3)
+ case NGX_HTTP_VERSION_30:
+ rc = ngx_http_v3_parse_request_body(r, cl->buf, rb->chunked);
+ break;
+#endif
+
+ default: /* HTTP/1.x */
+ rc = ngx_http_parse_chunked(r, cl->buf, rb->chunked);
+ }
if (rc == NGX_OK) {