mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
83 lines
3 KiB
Diff
83 lines
3 KiB
Diff
diff --git a/third_party/include/doctest/doctest.h b/third_party/include/doctest/doctest.h
|
|
index 94446982..13ccf272 100644
|
|
--- a/third_party/include/doctest/doctest.h
|
|
+++ b/third_party/include/doctest/doctest.h
|
|
@@ -3940,7 +3940,9 @@ namespace {
|
|
#if !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && !defined(DOCTEST_CONFIG_WINDOWS_SEH)
|
|
struct FatalConditionHandler
|
|
{
|
|
- void reset() {}
|
|
+ static void reset() {}
|
|
+ static void allocateAltStackMem() {}
|
|
+ static void freeAltStackMem() {}
|
|
};
|
|
#else // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
|
|
|
|
@@ -3977,6 +3979,9 @@ namespace {
|
|
return EXCEPTION_CONTINUE_SEARCH;
|
|
}
|
|
|
|
+ static void allocateAltStackMem() {}
|
|
+ static void freeAltStackMem() {}
|
|
+
|
|
FatalConditionHandler() {
|
|
isSet = true;
|
|
// 32k seems enough for doctest to handle stack overflow,
|
|
@@ -4029,7 +4034,8 @@ namespace {
|
|
static bool isSet;
|
|
static struct sigaction oldSigActions[DOCTEST_COUNTOF(signalDefs)];
|
|
static stack_t oldSigStack;
|
|
- static char altStackMem[4 * SIGSTKSZ];
|
|
+ static size_t altStackSize;
|
|
+ static char* altStackMem;
|
|
|
|
static void handleSignal(int sig) {
|
|
const char* name = "<unknown signal>";
|
|
@@ -4045,11 +4051,19 @@ namespace {
|
|
raise(sig);
|
|
}
|
|
|
|
+ static void allocateAltStackMem() {
|
|
+ altStackMem = new char[altStackSize];
|
|
+ }
|
|
+
|
|
+ static void freeAltStackMem() {
|
|
+ delete[] altStackMem;
|
|
+ }
|
|
+
|
|
FatalConditionHandler() {
|
|
isSet = true;
|
|
stack_t sigStack;
|
|
sigStack.ss_sp = altStackMem;
|
|
- sigStack.ss_size = sizeof(altStackMem);
|
|
+ sigStack.ss_size = altStackSize;
|
|
sigStack.ss_flags = 0;
|
|
sigaltstack(&sigStack, &oldSigStack);
|
|
struct sigaction sa = {};
|
|
@@ -4074,10 +4088,11 @@ namespace {
|
|
}
|
|
};
|
|
|
|
- bool FatalConditionHandler::isSet = false;
|
|
+ bool FatalConditionHandler::isSet = false;
|
|
struct sigaction FatalConditionHandler::oldSigActions[DOCTEST_COUNTOF(signalDefs)] = {};
|
|
- stack_t FatalConditionHandler::oldSigStack = {};
|
|
- char FatalConditionHandler::altStackMem[] = {};
|
|
+ stack_t FatalConditionHandler::oldSigStack = {};
|
|
+ size_t FatalConditionHandler::altStackSize = 4 * SIGSTKSZ;
|
|
+ char* FatalConditionHandler::altStackMem = nullptr;
|
|
|
|
#endif // DOCTEST_PLATFORM_WINDOWS
|
|
#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
|
|
@@ -5936,7 +5951,11 @@ int Context::run() {
|
|
p->cout = &fstr;
|
|
}
|
|
|
|
+ FatalConditionHandler::allocateAltStackMem();
|
|
+
|
|
auto cleanup_and_return = [&]() {
|
|
+ FatalConditionHandler::freeAltStackMem();
|
|
+
|
|
if(fstr.is_open())
|
|
fstr.close();
|
|
|