aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-18 17:42:29 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-18 17:42:29 +0000
commit87be736a89369f4c746e5a97352000eceaabac3a (patch)
tree80ecff5c1e2d79cc0a49032520537c0ba292b2fa
parent9d090bfa97a3de12fbc6123def434609349b9031 (diff)
downloadrspamd-87be736a89369f4c746e5a97352000eceaabac3a.tar.gz
rspamd-87be736a89369f4c746e5a97352000eceaabac3a.zip
[Fix] More leaks eliminated
-rw-r--r--src/libserver/cfg_rcl.c8
-rw-r--r--src/libutil/addr.c8
-rw-r--r--src/libutil/expression.c2
-rw-r--r--src/libutil/map.c19
-rw-r--r--src/lua/lua_map.c7
-rw-r--r--src/plugins/fuzzy_check.c2
-rw-r--r--src/rspamd.c3
7 files changed, 35 insertions, 14 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 48ecb94da..d3021570e 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -1184,7 +1184,7 @@ rspamd_rcl_statfile_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
st->symbol = rspamd_mempool_strdup (cfg->cfg_pool, key);
if (rspamd_rcl_section_parse_defaults (cfg, section, pool, obj, st, err)) {
- ccf->statfiles = g_list_prepend (ccf->statfiles, st);
+ ccf->statfiles = rspamd_mempool_glist_prepend (pool, ccf->statfiles, st);
if (st->label != NULL) {
labels = g_hash_table_lookup (ccf->labels, st->label);
@@ -1196,6 +1196,7 @@ rspamd_rcl_statfile_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
g_list_prepend (NULL, st));
}
}
+
if (st->symbol != NULL) {
g_hash_table_insert (cfg->classifiers_symbols, st->symbol, st);
}
@@ -1392,7 +1393,10 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool,
}
ref_idx = luaL_ref (L, LUA_REGISTRYINDEX);
- ccf->learn_conditions = g_list_append (ccf->learn_conditions,
+ rspamd_lua_add_ref_dtor (L, cfg->cfg_pool, ref_idx);
+ ccf->learn_conditions = rspamd_mempool_glist_append (
+ cfg->cfg_pool,
+ ccf->learn_conditions,
GINT_TO_POINTER (ref_idx));
lua_settop (L, 0);
}
diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index c72727c38..d02e43985 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -1020,7 +1020,13 @@ rspamd_resolve_addrs (const char *begin, size_t len, GPtrArray **addrs,
hints.ai_flags = AI_NUMERICSERV|flags;
if (len > 0) {
- addr_cpy = g_malloc (len + 1);
+ if (pool) {
+ addr_cpy = rspamd_mempool_alloc (pool, len + 1);
+ }
+ else {
+ addr_cpy = g_malloc (len + 1);
+ }
+
rspamd_strlcpy (addr_cpy, begin, len + 1);
}
/* Otherwise it will be NULL */
diff --git a/src/libutil/expression.c b/src/libutil/expression.c
index 8562ca36c..adc926e53 100644
--- a/src/libutil/expression.c
+++ b/src/libutil/expression.c
@@ -379,6 +379,8 @@ rspamd_ast_add_node (GPtrArray *operands, struct rspamd_expression_elt *op,
if (a1 == NULL) {
g_set_error (err, rspamd_expr_quark(), EINVAL, "no operand to "
"unary '%s' operation", rspamd_expr_op_to_str (op->p.op));
+ g_node_destroy (res);
+
return FALSE;
}
diff --git a/src/libutil/map.c b/src/libutil/map.c
index af76c6979..3266b5cf3 100644
--- a/src/libutil/map.c
+++ b/src/libutil/map.c
@@ -1603,7 +1603,8 @@ rspamd_map_add_from_ucl (struct rspamd_config *cfg,
g_ptr_array_add (map->backends, bk);
if (!map->name) {
- map->name = g_strdup (ucl_object_tostring (cur));
+ map->name = rspamd_mempool_strdup (cfg->cfg_pool,
+ ucl_object_tostring (cur));
}
}
}
@@ -1621,16 +1622,14 @@ rspamd_map_add_from_ucl (struct rspamd_config *cfg,
else if (ucl_object_type (obj) == UCL_OBJECT) {
elt = ucl_object_lookup (obj, "name");
if (elt && ucl_object_type (elt) == UCL_STRING) {
- map->name = g_strdup (ucl_object_tostring (elt));
+ map->name = rspamd_mempool_strdup (cfg->cfg_pool,
+ ucl_object_tostring (elt));
}
elt = ucl_object_lookup (obj, "description");
if (elt && ucl_object_type (elt) == UCL_STRING) {
- if (map->description) {
- g_free (map->description);
- }
-
- map->description = g_strdup (ucl_object_tostring (elt));
+ map->description = rspamd_mempool_strdup (cfg->cfg_pool,
+ ucl_object_tostring (elt));
}
elt = ucl_object_lookup_any (obj, "timeout", "poll", "poll_time",
@@ -1657,7 +1656,8 @@ rspamd_map_add_from_ucl (struct rspamd_config *cfg,
g_ptr_array_add (map->backends, bk);
if (!map->name) {
- map->name = g_strdup (ucl_object_tostring (cur));
+ map->name = rspamd_mempool_strdup (cfg->cfg_pool,
+ ucl_object_tostring (cur));
}
}
}
@@ -1683,7 +1683,8 @@ rspamd_map_add_from_ucl (struct rspamd_config *cfg,
g_ptr_array_add (map->backends, bk);
if (!map->name) {
- map->name = g_strdup (ucl_object_tostring (elt));
+ map->name = rspamd_mempool_strdup (cfg->cfg_pool,
+ ucl_object_tostring (elt));
}
}
}
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c
index 0b271affe..c74bcf31b 100644
--- a/src/lua/lua_map.c
+++ b/src/lua/lua_map.c
@@ -381,6 +381,9 @@ lua_config_add_map (lua_State *L)
&map_obj, &description, &cbidx, &type)) {
ret = luaL_error (L, "invalid table arguments: %s", err->message);
g_error_free (err);
+ if (map_obj) {
+ ucl_object_unref (map_obj);
+ }
return ret;
}
@@ -410,6 +413,10 @@ lua_config_add_map (lua_State *L)
luaL_unref (L, LUA_REGISTRYINDEX, cbidx);
}
+ if (map_obj) {
+ ucl_object_unref (map_obj);
+ }
+
lua_pushnil (L);
return 1;
diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c
index 1088fe639..040219e2a 100644
--- a/src/plugins/fuzzy_check.c
+++ b/src/plugins/fuzzy_check.c
@@ -237,7 +237,7 @@ parse_mime_types (const gchar *str)
gchar **strvec, *p;
gint num, i;
struct fuzzy_mime_type *type;
- GPtrArray *res = g_ptr_array_new ();
+ GPtrArray *res;
strvec = g_strsplit_set (str, ",", 0);
num = g_strv_length (strvec);
diff --git a/src/rspamd.c b/src/rspamd.c
index 19811238c..6a9c4f321 100644
--- a/src/rspamd.c
+++ b/src/rspamd.c
@@ -642,7 +642,7 @@ spawn_workers (struct rspamd_main *rspamd_main, struct event_base *ev_base)
}
}
- g_ptr_array_free (seen_mandatory_workers);
+ g_ptr_array_free (seen_mandatory_workers, TRUE);
}
static void
@@ -1417,6 +1417,7 @@ main (gint argc, gchar **argv, gchar **env)
REF_RELEASE (rspamd_main->cfg);
g_hash_table_unref (rspamd_main->spairs);
rspamd_mempool_delete (rspamd_main->server_pool);
+ rspamd_pidfile_close (rspamd_main->pfh);
g_free (rspamd_main);
event_base_free (ev_base);