]> git.kaiwu.me - nginx.git/commitdiff
HTTP/3: fixed Insert With Name Reference index processing.
authorSergey Kandaurov <pluknet@nginx.com>
Thu, 27 May 2021 10:29:00 +0000 (13:29 +0300)
committerSergey Kandaurov <pluknet@nginx.com>
Thu, 27 May 2021 10:29:00 +0000 (13:29 +0300)
Based on a patch by Zhiyong Sun.

src/http/v3/ngx_http_v3_tables.c

index e07332c96f2fbde0a52f8542495534646fd8987c..8f4e28edd3b70b44ee83c185d26abc869e16e37c 100644 (file)
@@ -159,12 +159,23 @@ ngx_int_t
 ngx_http_v3_ref_insert(ngx_connection_t *c, ngx_uint_t dynamic,
     ngx_uint_t index, ngx_str_t *value)
 {
-    ngx_str_t  name;
+    ngx_str_t                     name;
+    ngx_http_v3_session_t        *h3c;
+    ngx_http_v3_dynamic_table_t  *dt;
 
     if (dynamic) {
         ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
                        "http3 ref insert dynamic[%ui] \"%V\"", index, value);
 
+        h3c = ngx_http_v3_get_session(c);
+        dt = &h3c->table;
+
+        if (dt->base + dt->nelts <= index) {
+            return NGX_HTTP_V3_ERR_ENCODER_STREAM_ERROR;
+        }
+
+        index = dt->base + dt->nelts - 1 - index;
+
         if (ngx_http_v3_lookup(c, index, &name, NULL) != NGX_OK) {
             return NGX_HTTP_V3_ERR_ENCODER_STREAM_ERROR;
         }