details: https://hg.nginx.org/njs/rev/016d5d9077ef branches: changeset: 766:016d5d9077ef user: Dmitry Volyntsev <xei...@nginx.com> date: Wed Feb 06 19:52:54 2019 +0300 description: HTTP: improved setting empty headers.
Treating empty value as deleting. diffstat: nginx/ngx_http_js_module.c | 50 ++++++++++++++++++++++++++++----------------- 1 files changed, 31 insertions(+), 19 deletions(-) diffs (78 lines): diff -r 9bd38c6bf046 -r 016d5d9077ef nginx/ngx_http_js_module.c --- a/nginx/ngx_http_js_module.c Wed Feb 06 19:22:18 2019 +0300 +++ b/nginx/ngx_http_js_module.c Wed Feb 06 19:52:54 2019 +0300 @@ -949,7 +949,12 @@ ngx_http_js_ext_set_header_out(njs_vm_t h = ngx_http_js_get_header(&r->headers_out.headers.part, v->start, v->length); - if (h == NULL || h->hash == 0) { + if (h != NULL && value->length == 0) { + h->hash = 0; + h = NULL; + } + + if (h == NULL && value->length != 0) { h = ngx_list_push(&r->headers_out.headers); if (h == NULL) { return NJS_ERROR; @@ -964,19 +969,21 @@ ngx_http_js_ext_set_header_out(njs_vm_t h->key.data = p; h->key.len = v->length; + } + + if (h != NULL) { + p = ngx_pnalloc(r->pool, value->length); + if (p == NULL) { + return NJS_ERROR; + } + + ngx_memcpy(p, value->start, value->length); + + h->value.data = p; + h->value.len = value->length; h->hash = 1; } - p = ngx_pnalloc(r->pool, value->length); - if (p == NULL) { - return NJS_ERROR; - } - - ngx_memcpy(p, value->start, value->length); - - h->value.data = p; - h->value.len = value->length; - if (v->length == nxt_length("Content-Encoding") && ngx_strncasecmp(v->start, (u_char *) "Content-Encoding", v->length) == 0) @@ -988,15 +995,20 @@ ngx_http_js_ext_set_header_out(njs_vm_t && ngx_strncasecmp(v->start, (u_char *) "Content-Length", v->length) == 0) { - n = ngx_atoi(value->start, value->length); - if (n == NGX_ERROR) { - h->hash = 0; - njs_vm_error(vm, "failed converting argument to integer"); - return NJS_ERROR; + if (h != NULL) { + n = ngx_atoi(value->start, value->length); + if (n == NGX_ERROR) { + h->hash = 0; + njs_vm_error(vm, "failed converting argument to integer"); + return NJS_ERROR; + } + + r->headers_out.content_length = h; + r->headers_out.content_length_n = n; + + } else { + ngx_http_clear_content_length(r); } - - r->headers_out.content_length_n = n; - r->headers_out.content_length = h; } return NJS_OK; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel