]> git.kaiwu.me - nginx.git/commitdiff
Temporary fix for header null-termination in HTTP/3.
authorRoman Arutyunyan <arut@nginx.com>
Sat, 14 Mar 2020 10:18:55 +0000 (13:18 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Sat, 14 Mar 2020 10:18:55 +0000 (13:18 +0300)
src/http/ngx_http_request.c
src/http/v3/ngx_http_v3_request.c

index ef305faf417cbaf75020b950ded20da4417ab778..85b090d5f8c6eddd286104e006b7adb04111c471 100644 (file)
@@ -1547,11 +1547,11 @@ ngx_http_process_request_headers(ngx_event_t *rev)
 
             h->key.len = r->header_name_end - r->header_name_start;
             h->key.data = r->header_name_start;
-            //h->key.data[h->key.len] = '\0';
+            h->key.data[h->key.len] = '\0';
 
             h->value.len = r->header_end - r->header_start;
             h->value.data = r->header_start;
-            //h->value.data[h->value.len] = '\0';
+            h->value.data[h->value.len] = '\0';
 
             h->lowcase_key = ngx_pnalloc(r->pool, h->key.len);
             if (h->lowcase_key == NULL) {
index b34eed98e12750036e1c27ef36dbbf0ac7b88278..9cb351c2d3e75b45ac65c261efb886fe97c4ec6c 100644 (file)
@@ -518,6 +518,18 @@ done:
         }
     }
 
+    /* XXX ugly reallocation for the trailing '\0' */
+
+    p = ngx_pnalloc(c->pool, name.len + value.len + 2);
+    if (p == NULL) {
+        return NGX_ERROR;
+    }
+
+    ngx_memcpy(p, name.data, name.len);
+    name.data = p;
+    ngx_memcpy(p + name.len + 1, value.data, value.len);
+    value.data = p + name.len + 1;
+
     ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "http3 header \"%V\":\"%V\"", &name, &value);