]> git.kaiwu.me - nginx.git/commitdiff
HTTP/2: fixed padding handling in HEADERS frame with CONTINUATION.
authorValentin Bartenev <vbart@nginx.com>
Tue, 2 Feb 2016 13:33:55 +0000 (16:33 +0300)
committerValentin Bartenev <vbart@nginx.com>
Tue, 2 Feb 2016 13:33:55 +0000 (16:33 +0300)
src/http/v2/ngx_http_v2.c

index b7106fec82339fe9ce88d5151eecaa818f6aea85..4e378c9dc0d562ef49397376711cdca38486fbcd 100644 (file)
@@ -1733,11 +1733,21 @@ ngx_http_v2_handle_continuation(ngx_http_v2_connection_t *h2c, u_char *pos,
     u_char *end, ngx_http_v2_handler_pt handler)
 {
     u_char    *p;
-    size_t     len;
+    size_t     len, skip;
     uint32_t   head;
 
     len = h2c->state.length;
 
+    if (h2c->state.padding && (size_t) (end - pos) > len) {
+        skip = ngx_min(h2c->state.padding, (end - pos) - len);
+
+        h2c->state.padding -= skip;
+
+        p = pos;
+        pos += skip;
+        ngx_memmove(pos, p, len);
+    }
+
     if ((size_t) (end - pos) < len + NGX_HTTP_V2_FRAME_HEADER_SIZE) {
         return ngx_http_v2_state_save(h2c, pos, end, handler);
     }