From: Dmitry Volyntsev Date: Wed, 6 Jul 2022 23:52:50 +0000 (-0700) Subject: HTTP: fixed r.headersOut setter for special headers. X-Git-Tag: 0.7.6~8 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=7f37bf30ee5b43ee346649ce66c823a435bd70d8;p=njs.git HTTP: fixed r.headersOut setter for special headers. 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. --- diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c index 0c0d9114..5f8600df 100644 --- a/nginx/ngx_http_js_module.c +++ b/nginx/ngx_http_js_module.c @@ -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;