Module: wine Branch: master Commit: d751c2e5c15b97b30a945841040c34f451983317 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d751c2e5c15b97b30a94584104...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jan 7 14:17:26 2009 +0100
msvcrt: Correctly walk up the list of trylevels in except_handler3.
---
dlls/msvcrt/except.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c index 6a6fed3..7c4ee47 100644 --- a/dlls/msvcrt/except.c +++ b/dlls/msvcrt/except.c @@ -219,10 +219,10 @@ int CDECL _except_handler3(PEXCEPTION_RECORD rec,
while (trylevel != TRYLEVEL_END) { + TRACE( "level %d prev %d filter %p\n", trylevel, pScopeTable[trylevel].previousTryLevel, + pScopeTable[trylevel].lpfnFilter ); if (pScopeTable[trylevel].lpfnFilter) { - TRACE("filter = %p\n", pScopeTable[trylevel].lpfnFilter); - retval = call_filter( pScopeTable[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
TRACE("filter returned %s\n", retval == EXCEPTION_CONTINUE_EXECUTION ? @@ -241,13 +241,13 @@ int CDECL _except_handler3(PEXCEPTION_RECORD rec, /* Set our trylevel to the enclosing block, and call the __finally * code, which won't return */ - frame->trylevel = pScopeTable->previousTryLevel; + frame->trylevel = pScopeTable[trylevel].previousTryLevel; TRACE("__finally block %p\n",pScopeTable[trylevel].lpfnHandler); call_finally_block(pScopeTable[trylevel].lpfnHandler, &frame->_ebp); ERR("Returned from __finally block - expect crash!\n"); } } - trylevel = pScopeTable->previousTryLevel; + trylevel = pScopeTable[trylevel].previousTryLevel; } } #else