From 1d508d592c40534392814c15b319d71d8e80a2dc Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Fri, 14 Nov 2025 16:57:31 +0100 Subject: [PATCH] Fix memory leaks when OMEMO keys have not been generated yet. Signed-off-by: Steffen Jaeckel --- src/omemo/omemo.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 132ac39b..022e8acc 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -275,26 +275,23 @@ omemo_on_connect(ProfAccount* account) void omemo_on_disconnect(void) { - if (!omemo_ctx.loaded) { - return; + if (omemo_ctx.loaded) { + free_keyfile(&omemo_ctx.knowndevices); + free_keyfile(&omemo_ctx.sessions); + free_keyfile(&omemo_ctx.trust); + + ec_public_key* pub = ratchet_identity_key_pair_get_public(omemo_ctx.identity_key_pair); + ec_private_key* priv = ratchet_identity_key_pair_get_private(omemo_ctx.identity_key_pair); + ratchet_identity_key_pair_destroy((signal_type_base*)omemo_ctx.identity_key_pair); + ec_private_key_destroy((signal_type_base*)priv); + ec_public_key_destroy((signal_type_base*)pub); } + free_keyfile(&omemo_ctx.identity); g_hash_table_destroy(omemo_ctx.known_devices); g_hash_table_destroy(omemo_ctx.device_list_handler); g_hash_table_destroy(omemo_ctx.device_list); - - free_keyfile(&omemo_ctx.knowndevices); - free_keyfile(&omemo_ctx.sessions); - free_keyfile(&omemo_ctx.trust); - free_keyfile(&omemo_ctx.identity); - signal_protocol_store_context_destroy(omemo_ctx.store); - ec_public_key* pub = ratchet_identity_key_pair_get_public(omemo_ctx.identity_key_pair); - ec_private_key* priv = ratchet_identity_key_pair_get_private(omemo_ctx.identity_key_pair); - ratchet_identity_key_pair_destroy((signal_type_base*)omemo_ctx.identity_key_pair); - ec_private_key_destroy((signal_type_base*)priv); - ec_public_key_destroy((signal_type_base*)pub); - signal_context_destroy(omemo_ctx.signal); memset(&omemo_ctx, 0, sizeof(omemo_ctx)); }