From b04650fb1c2175c89979d77d490b84d5a8a3cf61 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 11:40:23 +0200 Subject: [PATCH 1/3] Fix memleak in cmd_omemo_gen() --- src/command/cmd_funcs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 65bfedad..1a0d3bb1 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -8621,6 +8621,7 @@ cmd_omemo_gen(ProfWin* window, const char* const command, gchar** args) ui_update(); ProfAccount* account = accounts_get_account(session_get_account_name()); omemo_generate_crypto_materials(account); + account_free(account); cons_show("OMEMO cryptographic materials generated. Your Device ID is %d.", omemo_device_id()); return TRUE; #else From d341705a4341a052fa330644b23e9fe1be632347 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 11:46:50 +0200 Subject: [PATCH 2/3] Fix possible leaks in omemo_receive_message() At that point we might have allocated memory that should be freed. --- src/xmpp/omemo.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/xmpp/omemo.c b/src/xmpp/omemo.c index 459b5419..0beb6ee9 100644 --- a/src/xmpp/omemo.c +++ b/src/xmpp/omemo.c @@ -391,16 +391,16 @@ omemo_receive_message(xmpp_stanza_t* const stanza, gboolean* trusted) xmpp_stanza_t* payload = xmpp_stanza_get_child_by_name(encrypted, "payload"); if (!payload) { - return NULL; + goto quit; } payload_text = xmpp_stanza_get_text(payload); if (!payload_text) { - return NULL; + goto quit; } size_t payload_len; payload_raw = g_base64_decode(payload_text, &payload_len); if (!payload_raw) { - return NULL; + goto quit; } xmpp_stanza_t* key_stanza; @@ -444,6 +444,7 @@ omemo_receive_message(xmpp_stanza_t* const stanza, gboolean* trusted) g_list_free_full(keys, (GDestroyNotify)omemo_key_free); } +quit: g_free(iv_raw); g_free(payload_raw); g_free(iv_text); From cee92b0a708320d0d317d8a7ecc4742923f2a7dc Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 15:27:51 +0200 Subject: [PATCH 3/3] Use variable name in buffer_remove_entry() We assign it just above. --- src/ui/buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/buffer.c b/src/ui/buffer.c index ab474956..f9a7892b 100644 --- a/src/ui/buffer.c +++ b/src/ui/buffer.c @@ -145,7 +145,7 @@ buffer_remove_entry(ProfBuff buffer, int entry) GSList* node = g_slist_nth(buffer->entries, entry); ProfBuffEntry* e = node->data; buffer->lines -= e->_lines; - _free_entry(node->data); + _free_entry(e); buffer->entries = g_slist_delete_link(buffer->entries, node); }