commit 4f022b7: [Fix] Fix compilation of the hyperscan databases with errors

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Oct 11 09:07:04 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-10-11 09:58:16 +0100
URL: https://github.com/rspamd/rspamd/commit/4f022b784f01ed9120a44c014367cb2df8fd5df2 (HEAD -> master)

[Fix] Fix compilation of the hyperscan databases with errors

---
 src/libserver/re_cache.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c
index 82bbcee1c..91ef2cfa4 100644
--- a/src/libserver/re_cache.c
+++ b/src/libserver/re_cache.c
@@ -1862,12 +1862,19 @@ struct rspamd_re_cache_hs_compile_cbdata {
 
 static void
 rspamd_re_cache_compile_err (EV_P_ ev_timer *w, GError *err,
-		struct rspamd_re_cache_hs_compile_cbdata *cbdata)
+		struct rspamd_re_cache_hs_compile_cbdata *cbdata, bool is_fatal)
 {
-	ev_timer_stop (EV_A_ w);
 	cbdata->cb (cbdata->total, err, cbdata->cbd);
-	g_free (w);
-	g_free (cbdata);
+
+	if (is_fatal) {
+		ev_timer_stop(EV_A_ w);
+		g_free(w);
+		g_free(cbdata);
+	}
+	else {
+		/* Continue compilation */
+		ev_timer_again(EV_A_ w);
+	}
 	g_error_free (err);
 }
 
@@ -1954,7 +1961,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 	if (fd == -1) {
 		err = g_error_new (rspamd_re_cache_quark (), errno,
 				"cannot open file %s: %s", path, strerror (errno));
-		rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+		rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 		return;
 	}
 
@@ -2074,7 +2081,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 			unlink (path);
 			hs_free_compile_error (hs_errors);
 
-			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 
 			return;
 		}
@@ -2099,7 +2106,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 			g_free (hs_flags);
 			hs_free_database (test_db);
 
-			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 			return;
 		}
 
@@ -2156,7 +2163,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 			g_free (hs_flags);
 			g_free (hs_serialized);
 
-			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 			return;
 		}
 
@@ -2197,7 +2204,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 			unlink (path);
 			close (fd);
 
-			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+			rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 			return;
 		}
 
@@ -2217,7 +2224,7 @@ rspamd_re_cache_compile_timer_cb (EV_P_ ev_timer *w, int revents )
 		g_free (hs_flags);
 		unlink (path);
 		close (fd);
-		rspamd_re_cache_compile_err (EV_A_ w, err, cbdata);
+		rspamd_re_cache_compile_err (EV_A_ w, err, cbdata, false);
 
 		return;
 	}


More information about the Commits mailing list