commit 4b71ff7: [Minor] Fix crash after last merge

Vsevolod Stakhov vsevolod at highsecure.ru
Sun Mar 10 21:42:03 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-03-10 21:34:05 +0000
URL: https://github.com/rspamd/rspamd/commit/4b71ff74fd67800a4cc38e0cf5fa2a8af975105a

[Minor] Fix crash after last merge

---
 src/plugins/surbl.c | 81 +++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 57 insertions(+), 24 deletions(-)

diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c
index 26af1210c..46c769a78 100644
--- a/src/plugins/surbl.c
+++ b/src/plugins/surbl.c
@@ -641,6 +641,42 @@ register_bit_symbols (struct rspamd_config *cfg, struct suffix_item *suffix,
 	}
 }
 
+static void
+surbl_module_add_ip (const ucl_object_t *ip, const gchar *symbol,
+					 struct suffix_item* suffix,
+					 struct rspamd_config* cfg)
+{
+	gchar* p;
+	guint32 bit;
+	const gchar* ip_val;
+	struct surbl_bit_item* new_bit;
+
+	ip_val = ucl_obj_tostring (ip);
+	new_bit = rspamd_mempool_alloc (
+			cfg->cfg_pool,
+			sizeof(struct surbl_bit_item));
+	if (inet_pton (AF_INET, ip_val, &bit) != 1) {
+		msg_err_config ("cannot parse ip %s: %s", ip_val,
+				strerror (errno));
+		return;
+	}
+
+	new_bit->bit = bit;
+	new_bit->symbol = rspamd_mempool_strdup (
+			cfg->cfg_pool,
+			symbol);
+	/* Convert to uppercase */
+	p = new_bit->symbol;
+	while (*p) {
+		*p = g_ascii_toupper (*p);
+		p++;
+	}
+	msg_debug_config ("add new IP suffix: %d with symbol: %s",
+			(gint)new_bit->bit, new_bit->symbol);
+	g_hash_table_insert (suffix->ips, &new_bit->bit,
+			new_bit);
+}
+
 static gint
 surbl_module_parse_rule (const ucl_object_t* value, struct rspamd_config* cfg)
 {
@@ -649,7 +685,7 @@ surbl_module_parse_rule (const ucl_object_t* value, struct rspamd_config* cfg)
 	gint cb_id;
 	gint nrules = 0;
 	struct suffix_item* new_suffix;
-	const gchar* ip_val, *monitored_domain = NULL;
+	const gchar *monitored_domain = NULL;
 	struct surbl_bit_item* new_bit;
 	ucl_object_t *ropts;
 	struct surbl_ctx *surbl_module_ctx = surbl_get_context (cfg);
@@ -835,7 +871,6 @@ surbl_module_parse_rule (const ucl_object_t* value, struct rspamd_config* cfg)
 		if (cur != NULL && cur->type == UCL_OBJECT) {
 			ucl_object_iter_t it = NULL;
 			const ucl_object_t* cur_bit;
-			guint32 bit;
 
 			new_suffix->ips = g_hash_table_new (g_int_hash, g_int_equal);
 			rspamd_mempool_add_destructor (cfg->cfg_pool,
@@ -844,30 +879,28 @@ surbl_module_parse_rule (const ucl_object_t* value, struct rspamd_config* cfg)
 
 			while ((cur_bit = ucl_object_iterate (cur, &it, true)) != NULL) {
 				if (ucl_object_key (cur_bit) != NULL) {
-					gchar* p;
-					ip_val = ucl_obj_tostring (cur_bit);
-					new_bit = rspamd_mempool_alloc (
-							cfg->cfg_pool,
-							sizeof(struct surbl_bit_item));
-					if (inet_pton (AF_INET, ip_val, &bit) != 1) {
-						msg_err_config ("cannot parse ip %s: %s", ip_val,
-								strerror (errno));
-						continue;
+					if (ucl_object_type (cur_bit) == UCL_STRING) {
+						/* Single IP */
+						surbl_module_add_ip (cur_bit, ucl_object_key (cur_bit),
+								new_suffix, cfg);
 					}
-					new_bit->bit = bit;
-					new_bit->symbol = rspamd_mempool_strdup (
-							cfg->cfg_pool,
-							ucl_object_key (cur_bit));
-					/* Convert to uppercase */
-					p = new_bit->symbol;
-					while (*p) {
-						*p = g_ascii_toupper (*p);
-						p++;
+					else if (ucl_object_type (cur_bit) == UCL_ARRAY) {
+						ucl_object_iter_t ar_it = NULL;
+						const ucl_object_t* cur_ar;
+
+						/* Array of IPs */
+						while ((cur_ar = ucl_object_iterate (cur_bit, &ar_it,
+								true)) != NULL) {
+							if (ucl_object_type (cur_ar) == UCL_STRING) {
+								surbl_module_add_ip (cur_ar,
+										ucl_object_key (cur_bit),
+										new_suffix, cfg);
+							}
+							else {
+								msg_err_config ("garbadge in ips element");
+							}
+						}
 					}
-					msg_debug_config ("add new IP suffix: %d with symbol: %s",
-							(gint)new_bit->bit, new_bit->symbol);
-					g_hash_table_insert (new_suffix->ips, &new_bit->bit,
-							new_bit);
 				}
 			}
 		}


More information about the Commits mailing list