diff --git a/NEWS b/NEWS index d8f9f9b4c4f..bf86a39548c 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.4.0beta1 +- PHPDBG: + . array out of bounds, stack overflow handled for segfault handler on windows. + (David Carlier) + 01 Aug 2024, PHP 8.4.0alpha4 diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 6528c6f2c2f..d09ededc1d6 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -1627,7 +1627,7 @@ phpdbg_main: #ifdef _WIN32 } __except(phpdbg_exception_handler_win32(xp = GetExceptionInformation())) { - phpdbg_error("Access violation (Segmentation fault) encountered\ntrying to abort cleanly..."); + phpdbg_error("Segmentation fault encountered\ntrying to abort cleanly..."); } #endif phpdbg_out: diff --git a/sapi/phpdbg/phpdbg_win.c b/sapi/phpdbg/phpdbg_win.c index 95cacfe6ff5..349d9c6261e 100644 --- a/sapi/phpdbg/phpdbg_win.c +++ b/sapi/phpdbg/phpdbg_win.c @@ -28,11 +28,15 @@ int phpdbg_exception_handler_win32(EXCEPTION_POINTERS *xp) { EXCEPTION_RECORD *xr = xp->ExceptionRecord; CONTEXT *xc = xp->ContextRecord; - if(xr->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { - - if (phpdbg_watchpoint_segfault_handler((void *)xr->ExceptionInformation[1]) == SUCCESS) { - return EXCEPTION_CONTINUE_EXECUTION; - } + switch (xr->ExceptionCode) { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_STACK_OVERFLOW: + if (phpdbg_watchpoint_segfault_handler((void *)xr->ExceptionInformation[1]) == SUCCESS) { + return EXCEPTION_CONTINUE_EXECUTION; + } + break; + EMPTY_SWITCH_DEFAULT_CASE() } return EXCEPTION_CONTINUE_SEARCH;