Daniel Lehman : vcruntime140_1: Use return address from catch block routine if not provided by catch block info.

Alexandre Julliard julliard at winehq.org
Fri May 22 13:51:09 CDT 2020


Module: wine
Branch: master
Commit: 2f5ea32377fc977ef14282c276020fba58799235
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2f5ea32377fc977ef14282c276020fba58799235

Author: Daniel Lehman <dlehman25 at gmail.com>
Date:   Thu May 21 20:51:30 2020 -0700

vcruntime140_1: Use return address from catch block routine if not provided by catch block info.

Signed-off-by: Daniel Lehman <dlehman25 at gmail.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vcruntime140_1/except_x86_64.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/dlls/vcruntime140_1/except_x86_64.c b/dlls/vcruntime140_1/except_x86_64.c
index 4cc6897223..e1a39c0662 100644
--- a/dlls/vcruntime140_1/except_x86_64.c
+++ b/dlls/vcruntime140_1/except_x86_64.c
@@ -603,7 +603,8 @@ static inline void find_catch_block4(EXCEPTION_RECORD *rec, CONTEXT *context,
                 (ULONG_PTR)rva_to_ptr(ci.handler, dispatch->ImageBase);
             catch_record.ExceptionInformation[6] = (ULONG_PTR)untrans_rec;
             catch_record.ExceptionInformation[7] = (ULONG_PTR)context;
-            catch_record.ExceptionInformation[8] = (ULONG_PTR)rva_to_ptr(
+            if (ci.ret_addr)
+                catch_record.ExceptionInformation[8] = (ULONG_PTR)rva_to_ptr(
                     ci.ret_addr + dispatch->FunctionEntry->BeginAddress, dispatch->ImageBase);
             RtlUnwindEx((void*)frame, (void*)dispatch->ControlPc, &catch_record, NULL, &ctx, NULL);
         }




More information about the wine-cvs mailing list