From: Paul Gofman pgofman@codeweavers.com
--- dlls/kernel32/tests/debugger.c | 2 +- dlls/kernelbase/debug.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c index 442547c565e..7d10266ce0b 100644 --- a/dlls/kernel32/tests/debugger.c +++ b/dlls/kernel32/tests/debugger.c @@ -2458,7 +2458,7 @@ static LONG WINAPI test_unhandled_exception_filter_topfilter( EXCEPTION_POINTERS ok( ret == EXCEPTION_EXECUTE_HANDLER, "got %#lx.\n", ret ); rec->ExceptionFlags = EXCEPTION_NESTED_CALL; ret = UnhandledExceptionFilter( ep ); - todo_wine ok( depth == 1, "got %d.\n", depth ); + ok( depth == 1, "got %d.\n", depth ); depth = 1; todo_wine ok( ret == EXCEPTION_CONTINUE_SEARCH, "got %#lx.\n", ret ); --depth; diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c index 453b6114c2b..bf3547f9db8 100644 --- a/dlls/kernelbase/debug.c +++ b/dlls/kernelbase/debug.c @@ -752,6 +752,7 @@ static BOOL check_resource_write( void *addr ) LONG WINAPI UnhandledExceptionFilter( EXCEPTION_POINTERS *epointers ) { const EXCEPTION_RECORD *rec = epointers->ExceptionRecord; + BOOL nested;
if (rec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && rec->NumberParameters >= 2) { @@ -772,7 +773,8 @@ LONG WINAPI UnhandledExceptionFilter( EXCEPTION_POINTERS *epointers ) TerminateProcess( GetCurrentProcess(), 1 ); }
- if (top_filter) + nested = rec->ExceptionFlags & EXCEPTION_NESTED_CALL; + if (top_filter && !nested) { LONG ret = top_filter( epointers ); if (ret != EXCEPTION_CONTINUE_SEARCH) return ret;