]> source.dussan.org Git - rspamd.git/commitdiff
Fix couple of memory leaks
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 7 Feb 2016 15:38:01 +0000 (15:38 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 7 Feb 2016 15:38:01 +0000 (15:38 +0000)
src/fuzzy_storage.c
src/libcryptobox/keypair.c
src/libserver/roll_history.c
src/libserver/symbols_cache.c

index d27f93ea51209b75d382887a062084dcb4e1c160..3810bb6403ec16cb38f03ffe3f2992c614fe9cbc 100644 (file)
@@ -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
index d8e160af1bc7d456271d398d8a58ba94eebfe888..51b372b5198bb6b095c4bcf5a5a538bfe7961615 100644 (file)
@@ -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;
 }
 
index 702a303d384f86b2b4595e493fa628aac68ad7d7..e94eccad62253f511e9abf9411093a6f96802087 100644 (file)
@@ -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;
index 50012c1a9fb0b516d2284b584bba03c1fab5acc8..b8a0170e43a5dc23c50ec1d22925d55fc7a87617 100644 (file)
@@ -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);