]> git.kaiwu.me - njs.git/commitdiff
Allowing to pass arbitrary number of arguments in ngx_js_call().
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 11 Feb 2021 14:30:59 +0000 (14:30 +0000)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 11 Feb 2021 14:30:59 +0000 (14:30 +0000)
nginx/ngx_http_js_module.c
nginx/ngx_js.c
nginx/ngx_js.h
nginx/ngx_stream_js_module.c

index 60dc8f989d58d1b0503545f9d531c914849856d7..9b9982dacaa0b15d305c3a18818c9b14c57e7af3 100644 (file)
@@ -660,8 +660,8 @@ ngx_http_js_content_event_handler(ngx_http_request_t *r)
 
     ctx->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
 
-    rc = ngx_js_call(ctx->vm, &jlcf->content, &ctx->request,
-                     r->connection->log);
+    rc = ngx_js_call(ctx->vm, &jlcf->content, r->connection->log,
+                     &ctx->request, 1);
 
     if (rc == NGX_ERROR) {
         ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -773,8 +773,8 @@ ngx_http_js_header_filter(ngx_http_request_t *r)
 
     pending = njs_vm_pending(ctx->vm);
 
-    rc = ngx_js_call(ctx->vm, &jlcf->header_filter, &ctx->request,
-                     r->connection->log);
+    rc = ngx_js_call(ctx->vm, &jlcf->header_filter, r->connection->log,
+                     &ctx->request, 1);
 
     if (rc == NGX_ERROR) {
         return NGX_ERROR;
@@ -820,7 +820,7 @@ ngx_http_js_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
 
     pending = njs_vm_pending(ctx->vm);
 
-    rc = ngx_js_call(ctx->vm, fname, &ctx->request, r->connection->log);
+    rc = ngx_js_call(ctx->vm, fname, r->connection->log, &ctx->request, 1);
 
     if (rc == NGX_ERROR) {
         v->not_found = 1;
index e2c083a919c6b69d7c97f960713f50f8a8913ed0..e87b8252b1c33c39e017c1c5327f664af3188cb0 100644 (file)
@@ -66,8 +66,8 @@ static njs_external_t  ngx_js_ext_core[] = {
 
 
 ngx_int_t
-ngx_js_call(njs_vm_t *vm, ngx_str_t *fname, njs_opaque_value_t *value,
-    ngx_log_t *log)
+ngx_js_call(njs_vm_t *vm, ngx_str_t *fname, ngx_log_t *log,
+    njs_opaque_value_t *args, njs_uint_t nargs)
 {
     njs_str_t        name, exception;
     njs_function_t  *func;
@@ -82,7 +82,7 @@ ngx_js_call(njs_vm_t *vm, ngx_str_t *fname, njs_opaque_value_t *value,
         return NGX_ERROR;
     }
 
-    if (njs_vm_call(vm, func, njs_value_arg(value), 1) != NJS_OK) {
+    if (njs_vm_call(vm, func, njs_value_arg(args), nargs) != NJS_OK) {
         njs_vm_retval_string(vm, &exception);
 
         ngx_log_error(NGX_LOG_ERR, log, 0,
index b2165e2dd9c08b750bc91fd5b7b38e92b835536e..bc80515efd2b463b397b58655cfe5e8d2e184413 100644 (file)
@@ -49,8 +49,8 @@ typedef ngx_msec_t (*ngx_external_resolver_timeout_pt)(njs_vm_t *vm,
                              : njs_vm_value_buffer_set(vm, value, start, len))
 
 
-ngx_int_t ngx_js_call(njs_vm_t *vm, ngx_str_t *s, njs_opaque_value_t *value,
-    ngx_log_t *log);
+ngx_int_t ngx_js_call(njs_vm_t *vm, ngx_str_t *fname, ngx_log_t *log,
+    njs_opaque_value_t *args, njs_uint_t nargs);
 
 njs_int_t ngx_js_ext_log(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
     njs_index_t level);
index 0b24ea76bb3b10bdc9475b9a3c4249cb6dc1674f..013377cca14e82ac6a59c49049251ede2aaf31d0 100644 (file)
@@ -461,7 +461,8 @@ ngx_stream_js_phase_handler(ngx_stream_session_t *s, ngx_str_t *name)
 
         ctx->status = NGX_ERROR;
 
-        rc = ngx_js_call(ctx->vm, name, &ctx->args[0], c->log);
+        rc = ngx_js_call(ctx->vm, name, c->log, &ctx->args[0], 1);
+
         if (rc == NGX_ERROR) {
             return rc;
         }
@@ -534,7 +535,8 @@ ngx_stream_js_body_filter(ngx_stream_session_t *s, ngx_chain_t *in,
     ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
 
     if (!ctx->filter) {
-        rc = ngx_js_call(ctx->vm, &jscf->filter, &ctx->args[0], c->log);
+        rc = ngx_js_call(ctx->vm, &jscf->filter, c->log, &ctx->args[0], 1);
+
         if (rc == NGX_ERROR) {
             return rc;
         }
@@ -630,7 +632,7 @@ ngx_stream_js_variable(ngx_stream_session_t *s, ngx_stream_variable_value_t *v,
 
     pending = njs_vm_pending(ctx->vm);
 
-    rc = ngx_js_call(ctx->vm, fname, &ctx->args[0], s->connection->log);
+    rc = ngx_js_call(ctx->vm, fname, s->connection->log, &ctx->args[0], 1);
 
     if (rc == NGX_ERROR) {
         v->not_found = 1;