]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] More leaks eliminated
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 18 Jan 2017 17:42:29 +0000 (17:42 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 18 Jan 2017 17:42:29 +0000 (17:42 +0000)
src/libserver/cfg_rcl.c
src/libutil/addr.c
src/libutil/expression.c
src/libutil/map.c
src/lua/lua_map.c
src/plugins/fuzzy_check.c
src/rspamd.c

index 48ecb94dafc6cf536cfa1d698e6fb9b1f12cf72b..d3021570ecf287deb3f50f9332b59f13eb339ab8 100644 (file)
@@ -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);
                        }
index c72727c38886a60efe139a3ecc64de54a17e18f0..d02e43985041891f4b4358608dc3e1ddfe5d70ff 100644 (file)
@@ -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 */
index 8562ca36c4d31b2ef67cacfe740453653027c695..adc926e533ee40b7b312c07efaa5e67bdd46f3d9 100644 (file)
@@ -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;
                }
 
index af76c6979363b867239afe2f65fe19a93e2f04c6..3266b5cf33e99e1c249bcfa7b8448904a93bce33 100644 (file)
@@ -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));
                                }
                        }
                }
index 0b271affeb8ceca1f2d8a76c453cf836526103c1..c74bcf31bcae3d4f25473b3d4aaf8f8630a03aae 100644 (file)
@@ -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;
index 1088fe639908488aeb2655f2f1477f56c7ad9c21..040219e2a8000685a4992b31fbe40d4677f05908 100644 (file)
@@ -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);
index 19811238c38274c44e51f9964117eba63f616d5e..6a9c4f321d6ba1c8eac97343898362550d2eb648 100644 (file)
@@ -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);