merge/upstream-full #105

Manually merged
jabber.developer merged 407 commits from merge/upstream-full into master 2026-05-26 17:54:34 +00:00
200 changed files with 4985 additions and 27397 deletions
Showing only changes of commit 1d508d592c - Show all commits

View File

@@ -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);

TODO: investigate double free/similar issues due to cleaning regardless of omemo_ctx.loaded. Likely, it's intentional, but I want to make sure. double free is worse than memleak

TODO: investigate double free/similar issues due to cleaning regardless of `omemo_ctx.loaded`. Likely, it's intentional, but I want to make sure. double free is worse than memleak

Fixed in 60da899bd — NULL-checks added before each g_hash_table_destroy / signal_*_destroy, since neither is documented as NULL-safe and a partial init leaves the handles zero.

Fixed in 60da899bd — NULL-checks added before each `g_hash_table_destroy` / `signal_*_destroy`, since neither is documented as NULL-safe and a partial init leaves the handles zero.
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));
}