git: 7a34813aa2b3 - main - mail/rspamd: Backport important fixes from the upstream

From: Vsevolod Stakhov <vsevolod_at_FreeBSD.org>
Date: Mon, 14 Nov 2022 21:18:24 UTC
The branch main has been updated by vsevolod:

URL: https://cgit.FreeBSD.org/ports/commit/?id=7a34813aa2b37410eba1716a17198e7325292249

commit 7a34813aa2b37410eba1716a17198e7325292249
Author:     Vsevolod Stakhov <vsevolod@FreeBSD.org>
AuthorDate: 2022-11-14 21:17:10 +0000
Commit:     Vsevolod Stakhov <vsevolod@FreeBSD.org>
CommitDate: 2022-11-14 21:17:10 +0000

    mail/rspamd: Backport important fixes from the upstream
---
 mail/rspamd/Makefile                               |  1 +
 .../files/patch-src_libserver_hyperscan_tools.cxx  | 21 +++++++++++++++++++++
 .../files/patch-src_libutil_cxx_file_util.cxx      | 22 ++++++++++++++++++++++
 mail/rspamd/files/pkg-message.in                   | 10 ++++++++++
 4 files changed, 54 insertions(+)

diff --git a/mail/rspamd/Makefile b/mail/rspamd/Makefile
index 2e86b69f48b9..a3810ab16f4e 100644
--- a/mail/rspamd/Makefile
+++ b/mail/rspamd/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	rspamd
 PORTVERSION=	3.4
+PORTREVISION=	1
 CATEGORIES=	mail
 
 MAINTAINER=	vsevolod@FreeBSD.org
diff --git a/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx b/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx
new file mode 100644
index 000000000000..72eb1173ae88
--- /dev/null
+++ b/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx
@@ -0,0 +1,21 @@
+diff --git a/src/libserver/hyperscan_tools.cxx b/src/libserver/hyperscan_tools.cxx
+index 6187208a9..96366067d 100644
+--- src/libserver/hyperscan_tools.cxx
++++ src/libserver/hyperscan_tools.cxx
+@@ -306,7 +306,15 @@ auto load_cached_hs_file(const char *fname, std::int64_t offset = 0) -> tl::expe
+ 						msg_debug_hyperscan_lambda("multipattern: create new database in %s; %Hz size",
+ 							tmpfile_pattern.data(), unserialized_size);
+ 						void *buf;
+-						posix_memalign(&buf, 16, unserialized_size);
++#ifdef HAVE_GETPAGESIZE
++						auto page_size = getpagesize();
++#else
++						auto page_size = sysconf(_SC_PAGESIZE);
++#endif
++						if (page_size == -1) {
++							page_size = 4096;
++						}
++						posix_memalign(&buf, page_size, unserialized_size);
+ 						if (buf == nullptr) {
+ 							return tl::make_unexpected(error {"Cannot allocate memory", errno, error_category::CRITICAL });
+ 						}
diff --git a/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx b/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx
new file mode 100644
index 000000000000..f7461da0c82b
--- /dev/null
+++ b/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx
@@ -0,0 +1,22 @@
+diff --git a/src/libutil/cxx/file_util.cxx b/src/libutil/cxx/file_util.cxx
+index e3b3a2605..4536fa97b 100644
+--- src/libutil/cxx/file_util.cxx
++++ src/libutil/cxx/file_util.cxx
+@@ -198,7 +198,7 @@ auto raii_mmaped_file::mmap_shared(raii_file &&file,
+ 	}
+ 	/* Update stat on file to ensure it is up-to-date */
+ 	file.update_stat();
+-	map = mmap(nullptr, file.get_size() - offset, flags, MAP_SHARED, file.get_fd(), offset);
++	map = mmap(nullptr, (std::size_t)(file.get_size() - offset), flags, MAP_SHARED, file.get_fd(), offset);
+ 
+ 	if (map == MAP_FAILED) {
+ 		return tl::make_unexpected(error { fmt::format("cannot mmap file {}: {}",
+@@ -206,7 +206,7 @@ auto raii_mmaped_file::mmap_shared(raii_file &&file,
+ 
+ 	}
+ 
+-	return raii_mmaped_file{std::move(file), map,  file.get_size() - offset};
++	return raii_mmaped_file{std::move(file), map,  (std::size_t)(file.get_size() - offset)};
+ }
+ 
+ auto raii_mmaped_file::mmap_shared(const char *fname, int open_flags,
diff --git a/mail/rspamd/files/pkg-message.in b/mail/rspamd/files/pkg-message.in
index 927f2a5b46ac..52b6ff711785 100644
--- a/mail/rspamd/files/pkg-message.in
+++ b/mail/rspamd/files/pkg-message.in
@@ -13,5 +13,15 @@
    You can edit %%ETCDIR%%/rspamd.newsyslog.conf
    to change log file rotation configuration.
 EOM
+},
+{ type: upgrade
+  maximum_version: 3.4
+  minimum_version: 3.3
+  message: <<EOM
+Due to the issues with Hyperscan alignment, it is recommended to remove the
+existing cached files that might cause troubles from /var/db/rspamd by using the
+following command: "find /var/db/rspamd/ -type f -name '*.unser' -delete"
+This action is needed merely for this particular upgrade.
+EOM
 }
 ]