summaryrefslogtreecommitdiff
path: root/www/nginx-devel/files
diff options
context:
space:
mode:
Diffstat (limited to 'www/nginx-devel/files')
-rw-r--r--www/nginx-devel/files/extra-patch-lua-nginx-module167
1 files changed, 167 insertions, 0 deletions
diff --git a/www/nginx-devel/files/extra-patch-lua-nginx-module b/www/nginx-devel/files/extra-patch-lua-nginx-module
new file mode 100644
index 000000000000..b2a22d723d1f
--- /dev/null
+++ b/www/nginx-devel/files/extra-patch-lua-nginx-module
@@ -0,0 +1,167 @@
+From b6d167cf1a93c0c885c28db5a439f2404874cb26 Mon Sep 17 00:00:00 2001
+From: Hiroaki Nakamura <hnakamur@gmail.com>
+Date: Tue, 28 Jun 2022 14:37:24 +0900
+Subject: [PATCH] bugfix: update handling of multiple headers changed in nginx
+ 1.23.0 (#2063)
+
+---
+ src/ngx_http_lua_headers_in.c | 46 ++++++++++++++++++++++++
+ src/ngx_http_lua_headers_out.c | 64 ++++++++++++++++++++++++++++++++++
+ 2 files changed, 110 insertions(+)
+
+diff --git a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c b/src/ngx_http_lua_headers_in.c
+index a55d9cac7..440548140 100644
+--- a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c
++++ b/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c
+@@ -152,9 +152,15 @@ static ngx_http_lua_set_header_t ngx_http_lua_set_handlers[] = {
+ ngx_http_set_builtin_header },
+ #endif
+
++#if defined(nginx_version) && nginx_version >= 1023000
++ { ngx_string("Cookie"),
++ offsetof(ngx_http_headers_in_t, cookie),
++ ngx_http_set_builtin_multi_header },
++#else
+ { ngx_string("Cookie"),
+ offsetof(ngx_http_headers_in_t, cookies),
+ ngx_http_set_builtin_multi_header },
++#endif
+
+ { ngx_null_string, 0, ngx_http_set_header }
+ };
+@@ -580,6 +586,45 @@ static ngx_int_t
+ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+ ngx_http_lua_header_val_t *hv, ngx_str_t *value)
+ {
++#if defined(nginx_version) && nginx_version >= 1023000
++ ngx_table_elt_t **headers, **ph, *h;
++ int nelts;
++
++ headers = (ngx_table_elt_t **) ((char *) &r->headers_in + hv->offset);
++
++ if (!hv->no_override && *headers != NULL) {
++ nelts = 0;
++ for (h = *headers; h; h = h->next) {
++ nelts++;
++ }
++
++ *headers = NULL;
++
++ dd("clear multi-value headers: %d", nelts);
++ }
++
++ if (ngx_http_set_header_helper(r, hv, value, &h) == NGX_ERROR) {
++ return NGX_ERROR;
++ }
++
++ if (value->len == 0) {
++ return NGX_OK;
++ }
++
++ dd("new multi-value header: %p", h);
++
++ if (*headers) {
++ for (ph = headers; *ph; ph = &(*ph)->next) { /* void */ }
++ *ph = h;
++
++ } else {
++ *headers = h;
++ }
++
++ h->next = NULL;
++
++ return NGX_OK;
++#else
+ ngx_array_t *headers;
+ ngx_table_elt_t **v, *h;
+
+@@ -626,6 +671,7 @@ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+
+ *v = h;
+ return NGX_OK;
++#endif
+ }
+
+
+diff --git a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c b/src/ngx_http_lua_headers_out.c
+index 6e9f9c19a..571723d9a 100644
+--- a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c
++++ b/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c
+@@ -311,6 +311,69 @@ static ngx_int_t
+ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+ ngx_http_lua_header_val_t *hv, ngx_str_t *value)
+ {
++#if defined(nginx_version) && nginx_version >= 1023000
++ ngx_table_elt_t **headers, *h, *ho, **ph;
++
++ headers = (ngx_table_elt_t **) ((char *) &r->headers_out + hv->offset);
++
++ if (hv->no_override) {
++ for (h = *headers; h; h = h->next) {
++ if (!h->hash) {
++ h->value = *value;
++ h->hash = hv->hash;
++ return NGX_OK;
++ }
++ }
++
++ goto create;
++ }
++
++ /* override old values (if any) */
++
++ if (*headers) {
++ for (h = (*headers)->next; h; h = h->next) {
++ h->hash = 0;
++ h->value.len = 0;
++ }
++
++ h = *headers;
++
++ h->value = *value;
++
++ if (value->len == 0) {
++ h->hash = 0;
++
++ } else {
++ h->hash = hv->hash;
++ }
++
++ return NGX_OK;
++ }
++
++create:
++
++ for (ph = headers; *ph; ph = &(*ph)->next) { /* void */ }
++
++ ho = ngx_list_push(&r->headers_out.headers);
++ if (ho == NULL) {
++ return NGX_ERROR;
++ }
++
++ ho->value = *value;
++
++ if (value->len == 0) {
++ ho->hash = 0;
++
++ } else {
++ ho->hash = hv->hash;
++ }
++
++ ho->key = hv->key;
++ ho->next = NULL;
++ *ph = ho;
++
++ return NGX_OK;
++#else
+ ngx_array_t *pa;
+ ngx_table_elt_t *ho, **ph;
+ ngx_uint_t i;
+@@ -384,6 +447,7 @@ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+ *ph = ho;
+
+ return NGX_OK;
++#endif
+ }
+
+