From: Dmitry Volyntsev Date: Thu, 21 May 2026 22:51:02 +0000 (-0700) Subject: QuickJS: fixed process.kill() signal error handling X-Git-Tag: 1.0.0~54 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/NGINX-js-1660x332.png%20%22NGINX%20JavaScript%20Banner%22?a=commitdiff_plain;h=bf2a76941e35e21959de0c880b9ed9f217462190;p=njs.git QuickJS: fixed process.kill() signal error handling --- diff --git a/src/qjs.c b/src/qjs.c index b7899158..3c75bb9d 100644 --- a/src/qjs.c +++ b/src/qjs.c @@ -469,11 +469,11 @@ static JSValue qjs_process_kill(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - int signo, pid; - JSValue val; - njs_str_t name; - const char *signal; - qjs_signal_entry_t *entry; + int signo, pid; + JSValue ret; + njs_str_t name; + const char *signal; + qjs_signal_entry_t *entry; if (JS_ToInt32(ctx, &pid, argv[0]) < 0) { return JS_EXCEPTION; @@ -491,20 +491,15 @@ qjs_process_kill(JSContext *ctx, JSValueConst this_val, int argc, } } else { - val = JS_ToString(ctx, argv[1]); - if (JS_IsException(val)) { - return JS_EXCEPTION; - } - - signal = JS_ToCString(ctx, val); + signal = JS_ToCString(ctx, argv[1]); if (signal == NULL) { - JS_FreeValue(ctx, val); return JS_EXCEPTION; } if (njs_strlen(signal) < 3 || memcmp(signal, "SIG", 3) != 0) { + ret = JS_ThrowTypeError(ctx, "unknown signal: %s", signal); JS_FreeCString(ctx, signal); - return JS_ThrowTypeError(ctx, "unknown signal: %s", signal); + return ret; } name.start = (u_char *) signal + 3; @@ -517,11 +512,13 @@ qjs_process_kill(JSContext *ctx, JSValueConst this_val, int argc, } } - JS_FreeCString(ctx, signal); - if (entry->name.length == 0) { - return JS_ThrowTypeError(ctx, "unknown signal: %s", signal); + ret = JS_ThrowTypeError(ctx, "unknown signal: %s", signal); + JS_FreeCString(ctx, signal); + return ret; } + + JS_FreeCString(ctx, signal); } if (kill(pid, signo) < 0) { diff --git a/test/shell_test.exp b/test/shell_test.exp index 02828270..9667b0bc 100644 --- a/test/shell_test.exp +++ b/test/shell_test.exp @@ -425,6 +425,7 @@ njs_run {"-c" "console.log(process.ppid)"} "\\d+" njs_run {"-c" "console.log(process.kill(process.pid, 0))"} "true" njs_run {"-c" "console.log(process.kill(process.pid, 'SIGCHLD'))"} "true" +njs_run {"-c" "process.kill(process.pid, 'SIG\\u0100')"} "TypeError: .*signal" # script args