]> git.kaiwu.me - njs.git/commitdiff
HTTP: fixed r.headersOut setter for special headers.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 6 Jul 2022 23:52:50 +0000 (16:52 -0700)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 6 Jul 2022 23:52:50 +0000 (16:52 -0700)
The issue was introduced in 5b7676ec600d (0.7.5) when njs module was
adapted to changes in nginx/1.23 related to header structures.

When special headers (Content-Length, Content-Type, Content-Encoding)
were set, the value of the last outgoing header might be overwritten
with a new set value.

This closes #555 issue on Github.

nginx/ngx_http_js_module.c

index 0c0d911405dab1c0ccbed56a3174d7716040b996..5f8600dfa1acf5e4ea7723507dc598afc45f2def 100644 (file)
@@ -3836,7 +3836,6 @@ ngx_http_js_header_out_special(njs_vm_t *vm, ngx_http_request_t *r,
         return NJS_ERROR;
     }
 
-    h = NULL;
     part = &headers->part;
     header = part->elts;
 
@@ -3861,10 +3860,14 @@ ngx_http_js_header_out_special(njs_vm_t *vm, ngx_http_request_t *r,
         if (h->key.len == v->length
             && ngx_strncasecmp(h->key.data, v->start, v->length) == 0)
         {
-            break;
+            goto done;
         }
     }
 
+    h = NULL;
+
+done:
+
     if (h != NULL && s.length == 0) {
         h->hash = 0;
         h = NULL;