[PATCH] ntdll: Call __finally blocks in __C_specific_handler (try2)

Piotr Caban piotr.caban at gmail.com
Sat Aug 6 03:45:21 CDT 2016


On 08/06/16 01:39, Daniel Lehman wrote:
> +                if (rec->ExceptionFlags & EH_TARGET_UNWIND &&
> +                    dispatch->TargetIp < dispatch->ImageBase + table->ScopeRecord[i].EndAddress)
> +                {
> +                    break;
> +                }
Here's a test that shows that you also need to check BeginAddress:
BOOL first = TRUE;

__try {
begin:
     if(!first) {
         printf("here\n");
         return 0;
     }

     first = FALSE;
     __try {
         __try {
             goto begin;
         } __finally {
             printf("finally 1\n");
         }
     } __finally {
         printf("finally 2\n");
     }
} __finally {
     printf("finally 3\n");
}



More information about the wine-devel mailing list