[njs] HTTP: improved working with unknown methods in subrequest().
Dmitry Volyntsev
xeioex at nginx.com
Tue May 28 14:05:29 UTC 2019
details: https://hg.nginx.org/njs/rev/6b7042a20523
branches:
changeset: 988:6b7042a20523
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Tue May 28 17:04:33 2019 +0300
description:
HTTP: improved working with unknown methods in subrequest().
diffstat:
nginx/ngx_http_js_module.c | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
diffs (63 lines):
diff -r f6234460852a -r 6b7042a20523 nginx/ngx_http_js_module.c
--- a/nginx/ngx_http_js_module.c Tue May 28 15:57:35 2019 +0300
+++ b/nginx/ngx_http_js_module.c Tue May 28 17:04:33 2019 +0300
@@ -1728,7 +1728,7 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm,
{
ngx_int_t rc;
nxt_str_t uri_arg, args_arg, method_name, body_arg;
- ngx_uint_t method, n, has_body;
+ ngx_uint_t method, methods_max, has_body;
njs_value_t *value;
njs_function_t *callback;
ngx_http_js_ctx_t *ctx;
@@ -1788,6 +1788,8 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm,
callback = NULL;
method = 0;
+ methods_max = sizeof(methods) / sizeof(methods[0]);
+
args_arg.length = 0;
args_arg.start = NULL;
has_body = 0;
@@ -1827,9 +1829,7 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm,
return NJS_ERROR;
}
- n = sizeof(methods) / sizeof(methods[0]);
-
- while (method < n) {
+ while (method < methods_max) {
if (method_name.length == methods[method].name.len
&& ngx_memcmp(method_name.start, methods[method].name.data,
method_name.length)
@@ -1840,11 +1840,6 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm,
method++;
}
-
- if (method == n) {
- njs_vm_error(vm, "unknown method \"%V\"", &method_name);
- return NJS_ERROR;
- }
}
value = njs_vm_object_prop(vm, options, &body_key);
@@ -1875,8 +1870,16 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm,
return NJS_ERROR;
}
- sr->method = methods[method].value;
- sr->method_name = methods[method].name;
+ if (method != methods_max) {
+ sr->method = methods[method].value;
+ sr->method_name = methods[method].name;
+
+ } else {
+ sr->method = NGX_HTTP_UNKNOWN;
+ sr->method_name.len = method_name.length;
+ sr->method_name.data = method_name.start;
+ }
+
sr->header_only = (sr->method == NGX_HTTP_HEAD) || (callback == NULL);
if (has_body) {
More information about the nginx-devel
mailing list