]> git.kaiwu.me - njs.git/commitdiff
HTTP: throwing an exception in r.internalRedirect() while filtering.
authorDmitry Volyntsev <xeioex@nginx.com>
Sat, 27 May 2023 02:13:39 +0000 (19:13 -0700)
committerDmitry Volyntsev <xeioex@nginx.com>
Sat, 27 May 2023 02:13:39 +0000 (19:13 -0700)
A user is notified explicitly that r.internalRedirect()
is not supported in filters.

nginx/ngx_http_js_module.c

index e2fda66d634380595c4394616aad3e9d0aaaad48..44abddc2ddb423201c634665a1a8a863e57ed539 100644 (file)
@@ -950,6 +950,7 @@ ngx_http_js_header_filter(ngx_http_request_t *r)
 
     ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
 
+    ctx->filter = 1;
     pending = njs_vm_pending(ctx->vm);
 
     rc = ngx_js_call(ctx->vm, &jlcf->header_filter, r->connection->log,
@@ -2433,6 +2434,11 @@ ngx_http_js_ext_internal_redirect(njs_vm_t *vm, njs_value_t *args,
 
     ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
 
+    if (ctx->filter) {
+        njs_vm_error(vm, "internalRedirect cannot be called while filtering");
+        return NJS_ERROR;
+    }
+
     if (ngx_js_string(vm, njs_arg(args, nargs, 1), &uri) != NGX_OK) {
         njs_vm_error(vm, "failed to convert uri arg");
         return NJS_ERROR;