- backported 099d5414e9.patch

slighty modified to match rspamd

OBS-URL: https://build.opensuse.org/package/show/server:mail/rspamd?expand=0&rev=68
This commit is contained in:
Marcus Rückert 2021-09-30 18:06:05 +00:00 committed by Git OBS Bridge
parent de4d73a4d7
commit d98b7898fe
3 changed files with 192 additions and 3 deletions

View File

@ -0,0 +1,178 @@
From 099d5414e97244ec44cf46b14cd176b3a3dc52e3 Mon Sep 17 00:00:00 2001
From: Viktor Kirilov <vik.kirilov@gmail.com>
Date: Sun, 21 Mar 2021 18:12:59 +0200
Subject: [PATCH] fixed #473 - SIGSTKSZ is no longer a constant in glibc 2.34+
so now the alternative stack memory is always dinamically allocated (even for
older glibc versions where SIGSTKSZ is still a constant)
---
doctest/doctest.h | 31 +++++++++++++++++++++++++------
doctest/parts/doctest.cpp | 31 +++++++++++++++++++++++++------
2 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/contrib/doctest/doctest/doctest.h b/doctest/doctest.h
index 88917eff..3ec64708 100644
--- a/contrib/doctest/doctest/doctest.h
+++ b/contrib/doctest/doctest/doctest.h
@@ -4171,7 +4171,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
@@ -4224,6 +4226,9 @@ namespace {
std::exit(EXIT_FAILURE);
}
+ static void allocateAltStackMem() {}
+ static void freeAltStackMem() {}
+
FatalConditionHandler() {
isSet = true;
// 32k seems enough for doctest to handle stack overflow,
@@ -4341,7 +4346,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>";
@@ -4357,11 +4363,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 = {};
@@ -4386,10 +4400,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
@@ -6282,7 +6297,11 @@ int Context::run() {
p->cout = &fstr;
}
+ FatalConditionHandler::allocateAltStackMem();
+
auto cleanup_and_return = [&]() {
+ FatalConditionHandler::freeAltStackMem();
+
if(fstr.is_open())
fstr.close();
diff --git a/contrib/doctest/doctest/parts/doctest.cpp b/doctest/parts/doctest.cpp
index 2b334374..8c09a4f3 100644
--- a/contrib/doctest/doctest/parts/doctest.cpp
+++ b/contrib/doctest/doctest/parts/doctest.cpp
@@ -1461,7 +1461,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
@@ -1514,6 +1516,9 @@ namespace {
std::exit(EXIT_FAILURE);
}
+ static void allocateAltStackMem() {}
+ static void freeAltStackMem() {}
+
FatalConditionHandler() {
isSet = true;
// 32k seems enough for doctest to handle stack overflow,
@@ -1631,7 +1636,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>";
@@ -1647,11 +1653,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 = {};
@@ -1676,10 +1690,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
@@ -3572,7 +3587,11 @@ int Context::run() {
p->cout = &fstr;
}
+ FatalConditionHandler::allocateAltStackMem();
+
auto cleanup_and_return = [&]() {
+ FatalConditionHandler::freeAltStackMem();
+
if(fstr.is_open())
fstr.close();

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Thu Sep 30 17:58:39 UTC 2021 - Marcus Rueckert <mrueckert@suse.de>
- backported https://github.com/onqtam/doctest/commit/099d5414e97244ec44cf46b14cd176b3a3dc52e3.patch
slighty modified to match rspamd
-------------------------------------------------------------------
Fri Sep 17 22:31:22 UTC 2021 - Marcus Rueckert <mrueckert@suse.de>

View File

@ -69,6 +69,7 @@ Patch0: rspamd-conf.patch
Patch1: rspamd-after-redis-target.patch
Patch2: https://github.com/rspamd/rspamd/commit/309bb213cf.patch
Patch3: https://github.com/rspamd/rspamd/commit/cdedeb9f4.patch
Patch4: https://github.com/onqtam/doctest/commit/099d5414e97244ec44cf46b14cd176b3a3dc52e3.patch
# PATCH-FIX-UPSTREAM - https://github.com/rspamd/rspamd/issues/3656
%if !0%{?is_opensuse}
# because 80-check-malware-scan-clamav triggered in SLE-15-SP2
@ -120,10 +121,14 @@ BuildRequires: pkgconfig(systemd)
%endif
BuildRequires: pkgconfig(libzstd)
%if 0%{?suse_version} < 1500
Requires: lua51-LPeg
%else
%if 0%{?suse_version} >= 1550
Requires: lua54-lpeg
%else
%if 0%{?suse_version} >= 1500
Requires: lua53-lpeg
%else
Requires: lua51-LPeg
%endif
%endif
%if 0%{?with split_out_client}
Requires: rspamd-client = %{version}