msvcrt: Destroy thrown c++ object before calling handler in _except_handler4_common.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
diff --git a/dlls/msvcrt/except_i386.c b/dlls/msvcrt/except_i386.c
index 7d7ec75..418c68b 100644
--- a/dlls/msvcrt/except_i386.c
+++ b/dlls/msvcrt/except_i386.c
@@ -950,6 +950,8 @@
if (retval == EXCEPTION_EXECUTE_HANDLER)
{
+ __DestructExceptionObject(rec);
+
/* Unwind all higher frames, this one will handle the exception */
_global_unwind2((EXCEPTION_REGISTRATION_RECORD*)frame);
msvcrt_local_unwind4( cookie, frame, trylevel, &frame->_ebp );
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index fafdc6b..b564dc1 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -219,6 +219,7 @@
BOOL __cdecl __CxxRegisterExceptionObject(EXCEPTION_RECORD**, cxx_frame_info*);
void __cdecl __CxxUnregisterExceptionObject(cxx_frame_info*, BOOL);
+void CDECL __DestructExceptionObject(EXCEPTION_RECORD*);
/* TLS data */
extern DWORD msvcrt_tls_index DECLSPEC_HIDDEN;