mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
bpo-31701: faulthandler: ignore MSC and COM Windows exception (#3929)
bpo-31701: On Windows, faulthandler.enable() now ignores MSC and COM exceptions.
This commit is contained in:
parent
c0cabc23bb
commit
6e3d6b5dc2
3 changed files with 36 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue