From 7f37bf30ee5b43ee346649ce66c823a435bd70d8 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 6 Jul 2022 16:52:50 -0700 Subject: [PATCH] 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. --- nginx/ngx_http_js_module.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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; -- 2.47.3