aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-02-07 15:38:01 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-02-07 15:38:01 +0000
commit47c0129f1d48c838af5618cc179296a1730643bf (patch)
tree003fffffd4d8fb9667604049c0f00d93d42c8e13
parent0b166c0c6541bce391839a3b4df2ca187ed66046 (diff)
downloadrspamd-47c0129f1d48c838af5618cc179296a1730643bf.tar.gz
rspamd-47c0129f1d48c838af5618cc179296a1730643bf.zip
Fix couple of memory leaks
-rw-r--r--src/fuzzy_storage.c9
-rw-r--r--src/libcryptobox/keypair.c6
-rw-r--r--src/libserver/roll_history.c2
-rw-r--r--src/libserver/symbols_cache.c3
4 files changed, 12 insertions, 8 deletions
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);