]> git.kaiwu.me - njs.git/commitdiff
QuickJS: fixed process.kill() signal error handling
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 21 May 2026 22:51:02 +0000 (15:51 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Tue, 26 May 2026 21:45:24 +0000 (14:45 -0700)
src/qjs.c
test/shell_test.exp

index b78991581b67ea7f7620fb1d6761c23d6b6ee150..3c75bb9d694426705ab75c6e167b2346668f1248 100644 (file)
--- 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) {
index 0282827080473b308c2289a343cf0ca4ed7a6ab1..9667b0bcfe37eb52f288e5ca1e73b58a98eb2d8f 100644 (file)
@@ -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