]> git.kaiwu.me - nginx.git/commitdiff
HTTP/3: move body parser call out of ngx_http_parse_chunked().
authorRoman Arutyunyan <arut@nginx.com>
Thu, 14 May 2020 11:49:53 +0000 (14:49 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Thu, 14 May 2020 11:49:53 +0000 (14:49 +0300)
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.

src/http/ngx_http_parse.c
src/http/ngx_http_request_body.c

index 92bcf12ad1ad02010af55e87b63fe9307d9987a7..f665934437d6fe446272f42a39cdda14d4711ef1 100644 (file)
@@ -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) {
index b07d8562fe84abb96860c1ecb018883d64760795..568f11f02ee3a896c4befa7e130d34b6ecb37a47 100644 (file)
@@ -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) {