aboutsummaryrefslogtreecommitdiff
path: root/mail/rspamd/files/patch-src_libserver_re_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/rspamd/files/patch-src_libserver_re_cache.c')
-rw-r--r--mail/rspamd/files/patch-src_libserver_re_cache.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/mail/rspamd/files/patch-src_libserver_re_cache.c b/mail/rspamd/files/patch-src_libserver_re_cache.c
new file mode 100644
index 000000000000..ce6ab71ea699
--- /dev/null
+++ b/mail/rspamd/files/patch-src_libserver_re_cache.c
@@ -0,0 +1,131 @@
+From 98e731bf69306a830834fbcfa7a21c3357130693 Mon Sep 17 00:00:00 2001
+From: Vsevolod Stakhov <vsevolod@rspamd.com>
+Date: Thu, 18 Sep 2025 10:03:39 +0100
+Subject: [PATCH] [Minor] Fix non-hyperscan build
+
+Issue: #5620
+---
+ src/libserver/re_cache.c | 29 +++++++++++++++++++++--------
+ 1 file changed, 21 insertions(+), 8 deletions(-)
+
+diff --git src/libserver/re_cache.c src/libserver/re_cache.c
+index fc056ecd8..2aa93e0d3 100644
+--- src/libserver/re_cache.c
++++ src/libserver/re_cache.c
+@@ -899,7 +899,6 @@ rspamd_re_cache_hyperscan_cb(unsigned int id,
+ }
+ else {
+ if (!isset(rt->checked, id)) {
+-
+ processed = 0;
+
+ for (i = 0; i < cbdata->count; i++) {
+@@ -933,7 +932,6 @@ rspamd_re_cache_process_regexp_data(struct rspamd_re_runtime *rt,
+ gboolean is_raw,
+ gboolean *processed_hyperscan)
+ {
+-
+ uint64_t re_id;
+ unsigned int ret = 0;
+ unsigned int i;
+@@ -1268,7 +1266,6 @@ rspamd_re_cache_process_headers_list(struct rspamd_task *task,
+
+ DL_FOREACH(rh, cur)
+ {
+-
+ if (is_strong && strcmp(cur->name, re_class->type_data) != 0) {
+ /* Skip a different case */
+ continue;
+@@ -1669,7 +1666,6 @@ rspamd_re_cache_exec_re(struct rspamd_task *task,
+ re_class->type_data,
+ (unsigned char ***) &scvec,
+ &lenvec, &cnt)) {
+-
+ ret = rspamd_re_cache_process_regexp_data(rt, re,
+ task, scvec, lenvec, cnt, raw, &processed_hyperscan);
+ msg_debug_re_task("checked selector(%s) regexp: %s -> %d",
+@@ -2080,7 +2076,6 @@ rspamd_re_cache_is_finite(struct rspamd_re_cache *cache,
+ &cache->plt,
+ &test_db,
+ &hs_errors) != HS_SUCCESS) {
+-
+ msg_info_re_cache("cannot compile (prefilter mode) '%s' to hyperscan: '%s'",
+ pat,
+ hs_errors != NULL ? hs_errors->message : "unknown error");
+@@ -2146,7 +2141,9 @@ struct rspamd_re_cache_hs_compile_cbdata {
+ double max_time;
+ gboolean silent;
+ unsigned int total;
++
+ void (*cb)(unsigned int ncompiled, GError *err, void *cbd);
++
+ void *cbd;
+ };
+
+@@ -2210,7 +2207,6 @@ rspamd_re_cache_compile_timer_cb(EV_P_ ev_timer *w, int revents)
+ G_DIR_SEPARATOR, re_class->hash);
+
+ if (rspamd_re_cache_is_valid_hyperscan_file(cache, path, TRUE, TRUE, NULL)) {
+-
+ fd = open(path, O_RDONLY, 00600);
+
+ /* Read number of regexps */
+@@ -2376,7 +2372,6 @@ rspamd_re_cache_compile_timer_cb(EV_P_ ev_timer *w, int revents)
+ &cache->plt,
+ &test_db,
+ &hs_errors) != HS_SUCCESS) {
+-
+ err = g_error_new(rspamd_re_cache_quark(), EINVAL,
+ "cannot create tree of regexp when processing '%s': %s",
+ hs_pats[hs_errors->expression], hs_errors->message);
+@@ -2560,7 +2555,9 @@ struct rspamd_re_cache_scoped_compile_data {
+ unsigned int completed_scopes;
+ unsigned int total_compiled;
+ GError *first_error;
++
+ void (*final_cb)(unsigned int ncompiled, GError *err, void *cbd);
++
+ void *final_cbd;
+ };
+
+@@ -3435,7 +3432,9 @@ struct rspamd_re_cache_hs_compile_scoped_cbdata {
+ double max_time;
+ gboolean silent;
+ int lock_fd;
++
+ void (*cb)(const char *scope, unsigned int ncompiled, GError *err, void *cbd);
++
+ void *cbd;
+ };
+
+@@ -3463,7 +3462,8 @@ int rspamd_re_cache_compile_hyperscan_scoped_single(struct rspamd_re_cache *cach
+ double max_time,
+ gboolean silent,
+ struct ev_loop *event_loop,
+- void (*cb)(const char *scope, unsigned int ncompiled, GError *err, void *cbd),
++ void (*cb)(const char *scope, unsigned int ncompiled, GError *err,
++ void *cbd),
+ void *cbd)
+ {
+ struct rspamd_re_cache_hs_compile_scoped_cbdata *scoped_cbd;
+@@ -3495,4 +3495,17 @@ int rspamd_re_cache_compile_hyperscan_scoped_single(struct rspamd_re_cache *cach
+ return rspamd_re_cache_compile_hyperscan(cache, cache_dir, max_time, silent,
+ event_loop, rspamd_re_cache_compile_scoped_cb, scoped_cbd);
+ }
++#else
++/* Non hyperscan version stub */
++int rspamd_re_cache_compile_hyperscan_scoped_single(struct rspamd_re_cache *cache,
++ const char *scope,
++ const char *cache_dir,
++ double max_time,
++ gboolean silent,
++ struct ev_loop *event_loop,
++ void (*cb)(const char *scope, unsigned int ncompiled, GError *err, void *cbd),
++ void *cbd)
++{
++ return 0;
++}
+ #endif
+--
+2.51.0
+