]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-96055: Update faulthandler to emit proper unexpect signal number (gh-99162)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 7 Nov 2022 02:45:54 +0000 (18:45 -0800)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 02:45:54 +0000 (18:45 -0800)
(cherry picked from commit f626b7b504df454d289527a4f922b09deeae9e21)

Co-authored-by: Dong-hee Na <donghee.na@python.org>
Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst [new file with mode: 0644]
Modules/faulthandler.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst b/Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst
new file mode 100644 (file)
index 0000000..c72fb21
--- /dev/null
@@ -0,0 +1,2 @@
+Update :mod:`faulthandler` to emit an error message with the proper
+unexpected signal number. Patch by Dong-hee Na.
index 4847c1cb87bc8e035778c3bd80f1fb8bb8cf5b28..04995d2e745792717e5ce1e590e5c64e0da9b0d7 100644 (file)
@@ -334,14 +334,17 @@ faulthandler_fatal_error(int signum)
     size_t i;
     fault_handler_t *handler = NULL;
     int save_errno = errno;
+    int found = 0;
 
     if (!fatal_error.enabled)
         return;
 
     for (i=0; i < faulthandler_nsignals; i++) {
         handler = &faulthandler_handlers[i];
-        if (handler->signum == signum)
+        if (handler->signum == signum) {
+            found = 1;
             break;
+        }
     }
     if (handler == NULL) {
         /* faulthandler_nsignals == 0 (unlikely) */
@@ -351,9 +354,18 @@ faulthandler_fatal_error(int signum)
     /* restore the previous handler */
     faulthandler_disable_fatal_handler(handler);
 
-    PUTS(fd, "Fatal Python error: ");
-    PUTS(fd, handler->name);
-    PUTS(fd, "\n\n");
+    if (found) {
+        PUTS(fd, "Fatal Python error: ");
+        PUTS(fd, handler->name);
+        PUTS(fd, "\n\n");
+    }
+    else {
+        char unknown_signum[23] = {0,};
+        snprintf(unknown_signum, 23, "%d", signum);
+        PUTS(fd, "Fatal Python error from unexpected signum: ");
+        PUTS(fd, unknown_signum);
+        PUTS(fd, "\n\n");
+    }
 
     faulthandler_dump_traceback(fd, fatal_error.all_threads,
                                 fatal_error.interp);