commit dc2447b: [Minor] Some fixes to allow empty symbols_enabled/disabled

Vsevolod Stakhov vsevolod at highsecure.ru
Fri May 29 14:49:07 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-05-29 15:18:55 +0100
URL: https://github.com/rspamd/rspamd/commit/dc2447bb6f940a72aedf9761598470f24a822d79

[Minor] Some fixes to allow empty symbols_enabled/disabled

---
 src/libserver/rspamd_symcache.c | 10 ++++------
 src/lua/lua_config.c            | 28 ++++++++++++++++++++++++++--
 2 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/libserver/rspamd_symcache.c b/src/libserver/rspamd_symcache.c
index 0bd68fca6..624d1c382 100644
--- a/src/libserver/rspamd_symcache.c
+++ b/src/libserver/rspamd_symcache.c
@@ -3531,10 +3531,8 @@ rspamd_symcache_get_forbidden_settings_ids (struct rspamd_symcache *cache,
 		return item->allowed_ids.dyn.n;
 	}
 	else {
-		while (item->forbidden_ids.st[cnt] != 0) {
+		while (item->forbidden_ids.st[cnt] != 0 && cnt < G_N_ELEMENTS (item->allowed_ids.st)) {
 			cnt ++;
-
-			g_assert (cnt < G_N_ELEMENTS (item->allowed_ids.st));
 		}
 
 		*nids = cnt;
@@ -3543,7 +3541,7 @@ rspamd_symcache_get_forbidden_settings_ids (struct rspamd_symcache *cache,
 	}
 }
 
-/* Usable for near-sorted ids list */
+/* Insertion sort: usable for near-sorted ids list */
 static inline void
 rspamd_ids_insertion_sort (guint *a, guint n)
 {
@@ -3571,7 +3569,7 @@ rspamd_symcache_add_id_to_list (rspamd_mempool_t *pool,
 	if (ls->st[0] == -1) {
 		/* Dynamic array */
 		if (ls->dyn.len < ls->dyn.allocated) {
-			/* Trivial, append + qsort */
+			/* Trivial, append + sort */
 			ls->dyn.n[ls->dyn.len++] = id;
 		}
 		else {
@@ -3590,7 +3588,7 @@ rspamd_symcache_add_id_to_list (rspamd_mempool_t *pool,
 	}
 	else {
 		/* Static part */
-		while (ls->st[cnt] != 0) {
+		while (ls->st[cnt] != 0 && cnt < G_N_ELEMENTS (ls->st)) {
 			cnt ++;
 		}
 
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c
index cfeb6e68d..a605f2fac 100644
--- a/src/lua/lua_config.c
+++ b/src/lua/lua_config.c
@@ -3796,6 +3796,30 @@ lua_config_register_finish_script (lua_State *L)
 	return 0;
 }
 
+static inline bool
+rspamd_lua_config_check_settings_symbols_object (const ucl_object_t *obj)
+{
+	if (obj == NULL) {
+		/* Semantically valid */
+		return true;
+	}
+
+	if (ucl_object_type (obj) == UCL_OBJECT) {
+		/* Key-value mapping - should be okay */
+		return true;
+	}
+
+	if (ucl_object_type (obj) == UCL_ARRAY) {
+		/* Okay if empty */
+		if (obj->len == 0) {
+			return true;
+		}
+	}
+
+	/* Everything else not okay */
+	return false;
+}
+
 static gint
 lua_config_register_settings_id (lua_State *L)
 {
@@ -3809,7 +3833,7 @@ lua_config_register_settings_id (lua_State *L)
 
 		sym_enabled = ucl_object_lua_import (L, 3);
 
-		if (sym_enabled != NULL && ucl_object_type (sym_enabled) != UCL_OBJECT) {
+		if (!rspamd_lua_config_check_settings_symbols_object (sym_enabled)) {
 			ucl_object_unref (sym_enabled);
 
 			return luaL_error (L, "invalid symbols enabled");
@@ -3817,7 +3841,7 @@ lua_config_register_settings_id (lua_State *L)
 
 		sym_disabled = ucl_object_lua_import (L, 4);
 
-		if (sym_disabled != NULL && ucl_object_type (sym_disabled) != UCL_OBJECT) {
+		if (!rspamd_lua_config_check_settings_symbols_object (sym_disabled)) {
 			ucl_object_unref (sym_enabled);
 			ucl_object_unref (sym_disabled);
 


More information about the Commits mailing list