From: Vsevolod Stakhov Date: Sun, 7 Feb 2016 15:38:01 +0000 (+0000) Subject: Fix couple of memory leaks X-Git-Tag: 1.2.0~295 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=47c0129f1d48c838af5618cc179296a1730643bf;p=rspamd.git Fix couple of memory leaks --- diff --git a/src/fuzzy_storage.c b/src/fuzzy_storage.c index d27f93ea5..3810bb640 100644 --- a/src/fuzzy_storage.c +++ b/src/fuzzy_storage.c @@ -154,6 +154,7 @@ struct fuzzy_peer_request { struct fuzzy_key { struct rspamd_cryptobox_keypair *key; + struct rspamd_cryptobox_pubkey *pk; struct fuzzy_key_stat *stat; }; @@ -601,7 +602,7 @@ rspamd_fuzzy_decrypt_command (struct fuzzy_session *s) if (!rspamd_cryptobox_decrypt_nm_inplace (payload, payload_len, hdr->nonce, rspamd_pubkey_get_nm (rk), hdr->mac, RSPAMD_CRYPTOBOX_MODE_25519)) { - msg_debug ("decryption failed"); + msg_err ("decryption failed"); rspamd_pubkey_unref (rk); return FALSE; @@ -1122,7 +1123,7 @@ fuzzy_parse_keypair (rspamd_mempool_t *pool, NULL); g_hash_table_insert (ctx->keys, (gpointer)pk, key); ctx->default_key = key; - msg_info_pool ("loaded keypair %8xs", pk); + msg_info_pool ("loaded keypair %*xs", 8, pk); } else if (ucl_object_type (obj) == UCL_ARRAY) { while ((cur = ucl_iterate_object (obj, &it, true)) != NULL) { @@ -1138,9 +1139,7 @@ fuzzy_parse_keypair (rspamd_mempool_t *pool, static guint fuzzy_kp_hash (gconstpointer p) { - const guchar *pk = p; - - return XXH64 (pk, RSPAMD_FUZZY_KEYLEN, 0xdeadbabe); + return *(guint *)p; } static gboolean diff --git a/src/libcryptobox/keypair.c b/src/libcryptobox/keypair.c index d8e160af1..51b372b51 100644 --- a/src/libcryptobox/keypair.c +++ b/src/libcryptobox/keypair.c @@ -342,6 +342,7 @@ rspamd_pubkey_from_base32 (const gchar *b32, } pk = rspamd_cryptobox_pubkey_alloc (type, alg); + REF_INIT_RETAIN (pk, rspamd_cryptobox_pubkey_dtor); pk->alg = alg; pk->type = type; pk_data = rspamd_cryptobox_pubkey_pk (pk, &pklen); @@ -388,6 +389,7 @@ rspamd_pubkey_from_hex (const gchar *hex, } pk = rspamd_cryptobox_pubkey_alloc (type, alg); + REF_INIT_RETAIN (pk, rspamd_cryptobox_pubkey_dtor); pk->alg = alg; pk->type = type; pk_data = rspamd_cryptobox_pubkey_pk (pk, &pklen); @@ -420,6 +422,7 @@ rspamd_pubkey_from_bin (const guchar *raw, } pk = rspamd_cryptobox_pubkey_alloc (type, alg); + REF_INIT_RETAIN (pk, rspamd_cryptobox_pubkey_dtor); pk->alg = alg; pk->type = type; pk_data = rspamd_cryptobox_pubkey_pk (pk, &pklen); @@ -698,6 +701,7 @@ rspamd_keypair_from_ucl (const ucl_object_t *obj) kp = rspamd_cryptobox_keypair_alloc (type, mode); kp->type = type; kp->alg = mode; + REF_INIT_RETAIN (kp, rspamd_cryptobox_keypair_dtor); g_assert (kp != NULL); target = rspamd_cryptobox_keypair_sk (kp, &len); @@ -734,8 +738,6 @@ rspamd_keypair_from_ucl (const ucl_object_t *obj) rspamd_cryptobox_hash (kp->id, target, len, NULL, 0); - REF_INIT_RETAIN (kp, rspamd_cryptobox_keypair_dtor); - return kp; } diff --git a/src/libserver/roll_history.c b/src/libserver/roll_history.c index 702a303d3..e94eccad6 100644 --- a/src/libserver/roll_history.c +++ b/src/libserver/roll_history.c @@ -307,6 +307,8 @@ rspamd_roll_history_load (struct roll_history *history, const gchar *filename) } } + ucl_object_unref (top); + history->cur_row = n; return TRUE; diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c index 50012c1a9..b8a0170e4 100644 --- a/src/libserver/symbols_cache.c +++ b/src/libserver/symbols_cache.c @@ -502,6 +502,7 @@ rspamd_symbols_cache_save_items (struct symbols_cache *cache, const gchar *name) efunc = ucl_object_emit_file_funcs (f); ret = ucl_object_emit_full (top, UCL_EMIT_JSON_COMPACT, efunc); ucl_object_emit_funcs_free (efunc); + ucl_object_unref (top); fclose (f); return ret; @@ -765,7 +766,7 @@ rspamd_symbols_cache_validate_cb (gpointer k, gpointer v, gpointer ud) g_hash_table_insert (m->symbols, item->symbol, s); mlist = g_hash_table_lookup (cache->cfg->metrics_symbols, item->symbol); - mlist = g_list_prepend (mlist, m); + mlist = g_list_append (mlist, m); g_hash_table_insert (cache->cfg->metrics_symbols, item->symbol, mlist);