From a13f5afa70d17597e80ad06e78c12148b8d80973 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 3 Feb 2023 22:17:53 -0800 Subject: [PATCH] Fetch: fixed compatibility with nginx-1.22 and below. Previously, ngx_table_elt_t structure was used directly in njs fetch code. This prevents from building with nginx-1.22 as the structure was changed after nginx-1.22. The fix is to use njs defined structure instead of ngx_table_elt_t. This fixes #610 issue on Github. --- nginx/ngx_js_fetch.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/nginx/ngx_js_fetch.c b/nginx/ngx_js_fetch.c index 7954b3a7..d9772c3d 100644 --- a/nginx/ngx_js_fetch.c +++ b/nginx/ngx_js_fetch.c @@ -47,6 +47,16 @@ typedef struct { } ngx_js_http_chunk_parse_t; +typedef struct ngx_js_tb_elt_s ngx_js_tb_elt_t; + +struct ngx_js_tb_elt_s { + ngx_uint_t hash; + ngx_str_t key; + ngx_str_t value; + ngx_js_tb_elt_t *next; +}; + + typedef struct { enum { GUARD_NONE = 0, @@ -651,7 +661,7 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_value_t *init, *value; ngx_js_http_t *http; ngx_list_part_t *part; - ngx_table_elt_t *h; + ngx_js_tb_elt_t *h; ngx_js_request_t request; ngx_connection_t *c; ngx_resolver_ctx_t *ctx; @@ -850,7 +860,7 @@ ngx_js_ext_headers_constructor(njs_vm_t *vm, njs_value_t *args, return NJS_ERROR; } - rc = ngx_list_init(&headers->header_list, pool, 4, sizeof(ngx_table_elt_t)); + rc = ngx_list_init(&headers->header_list, pool, 4, sizeof(ngx_js_tb_elt_t)); if (rc != NGX_OK) { njs_vm_memory_error(vm); return NJS_ERROR; @@ -933,7 +943,7 @@ ngx_js_ext_response_constructor(njs_vm_t *vm, njs_value_t *args, pool = ngx_external_pool(vm, njs_vm_external_ptr(vm)); rc = ngx_list_init(&response->headers.header_list, pool, 4, - sizeof(ngx_table_elt_t)); + sizeof(ngx_js_tb_elt_t)); if (rc != NGX_OK) { njs_vm_memory_error(vm); return NJS_ERROR; @@ -1076,7 +1086,7 @@ ngx_js_headers_inherit(njs_vm_t *vm, ngx_js_headers_t *headers, njs_int_t ret; ngx_uint_t i; ngx_list_part_t *part; - ngx_table_elt_t *h; + ngx_js_tb_elt_t *h; part = &orig->header_list.part; h = part->elts; @@ -1900,7 +1910,7 @@ ngx_js_request_constructor(njs_vm_t *vm, ngx_js_request_t *request, pool = ngx_external_pool(vm, external); rc = ngx_list_init(&request->headers.header_list, pool, 4, - sizeof(ngx_table_elt_t)); + sizeof(ngx_js_tb_elt_t)); if (rc != NGX_OK) { njs_vm_memory_error(vm); return NJS_ERROR; @@ -2031,7 +2041,7 @@ ngx_js_request_constructor(njs_vm_t *vm, ngx_js_request_t *request, */ rc = ngx_list_init(&request->headers.header_list, pool, 4, - sizeof(ngx_table_elt_t)); + sizeof(ngx_js_tb_elt_t)); if (rc != NGX_OK) { njs_vm_memory_error(vm); return NJS_ERROR; @@ -2161,7 +2171,7 @@ ngx_js_headers_append(njs_vm_t *vm, ngx_js_headers_t *headers, { u_char *p, *end; ngx_uint_t i; - ngx_table_elt_t *h, **ph; + ngx_js_tb_elt_t *h, **ph; ngx_list_part_t *part; const njs_str_t *f; @@ -2360,7 +2370,7 @@ ngx_js_http_process_headers(ngx_js_http_t *http) if (http->response.headers.header_list.size == 0) { rc = ngx_list_init(&http->response.headers.header_list, http->pool, 4, - sizeof(ngx_table_elt_t)); + sizeof(ngx_js_tb_elt_t)); if (rc != NGX_OK) { ngx_js_http_error(http, 0, "alloc failed"); return NGX_ERROR; @@ -3149,7 +3159,7 @@ ngx_headers_js_get(njs_vm_t *vm, njs_value_t *value, njs_str_t *name, size_t len; njs_int_t rc; ngx_uint_t i; - ngx_table_elt_t *h, *ph; + ngx_js_tb_elt_t *h, *ph; ngx_list_part_t *part; ngx_js_headers_t *headers; @@ -3296,7 +3306,7 @@ ngx_headers_js_ext_delete(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_str_t name; ngx_uint_t i; ngx_list_part_t *part; - ngx_table_elt_t *h; + ngx_js_tb_elt_t *h; ngx_js_headers_t *headers; headers = njs_vm_external(vm, ngx_http_js_fetch_headers_proto_id, @@ -3478,7 +3488,7 @@ ngx_headers_js_ext_keys(njs_vm_t *vm, njs_value_t *value, njs_value_t *keys) ngx_uint_t i, k, length; njs_value_t *start; ngx_list_part_t *part; - ngx_table_elt_t *h; + ngx_js_tb_elt_t *h; ngx_js_headers_t *headers; headers = njs_vm_external(vm, ngx_http_js_fetch_headers_proto_id, value); @@ -3558,7 +3568,7 @@ ngx_headers_js_ext_set(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_str_t name, value; ngx_uint_t i; ngx_list_part_t *part; - ngx_table_elt_t *h, **ph, **pp; + ngx_js_tb_elt_t *h, **ph, **pp; ngx_js_headers_t *headers; headers = njs_vm_external(vm, ngx_http_js_fetch_headers_proto_id, -- 2.47.3