diff options
Diffstat (limited to 'Modules/faulthandler.c')
-rw-r--r-- | Modules/faulthandler.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index c2c2c53..dba646b 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -360,6 +360,23 @@ faulthandler_fatal_error(int signum) } #ifdef MS_WINDOWS +static int +faulthandler_ignore_exception(DWORD code) +{ + /* bpo-30557: ignore exceptions which are not errors */ + if (!(code & 0x80000000)) { + return 1; + } + /* bpo-31701: ignore MSC and COM exceptions + E0000000 + code */ + if (code == 0xE06D7363 /* MSC exception ("Emsc") */ + || code == 0xE0434352 /* COM Callable Runtime exception ("ECCR") */) { + return 1; + } + /* Interesting exception: log it with the Python traceback */ + return 0; +} + static LONG WINAPI faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) { @@ -367,9 +384,8 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) DWORD code = exc_info->ExceptionRecord->ExceptionCode; DWORD flags = exc_info->ExceptionRecord->ExceptionFlags; - /* bpo-30557: only log fatal exceptions */ - if (!(code & 0x80000000)) { - /* call the next exception handler */ + if (faulthandler_ignore_exception(code)) { + /* ignore the exception: call the next exception handler */ return EXCEPTION_CONTINUE_SEARCH; } |