fix possible crashes in DLL under Windows (#98)

This commit is contained in:
TianZer 2024-04-27 21:10:40 +08:00 committed by GitHub
parent a256b245cc
commit e6aa690e75
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

22
ruapu.h
View File

@ -38,11 +38,28 @@ static int ruapu_detect_isa(const void* some_inst)
return 0;
}
#else // WINAPI_FAMILY == WINAPI_FAMILY_APP
typedef const void* ruapu_some_inst;
#if defined (_MSC_VER) // MSVC
static int ruapu_detect_isa(const void* some_inst)
{
int g_ruapu_sigill_caught = 0;
__try
{
((void (*)())some_inst)();
}
__except (GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
g_ruapu_sigill_caught = 1;
}
return g_ruapu_sigill_caught ? 0 : 1;
}
#else
static int g_ruapu_sigill_caught = 0;
static jmp_buf g_ruapu_jmpbuf;
typedef const void* ruapu_some_inst;
static LONG CALLBACK ruapu_catch_sigill(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_ILLEGAL_INSTRUCTION)
@ -69,6 +86,7 @@ static int ruapu_detect_isa(const void* some_inst)
return g_ruapu_sigill_caught ? 0 : 1;
}
#endif
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
#elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || defined __sun__