Merge pull request #1161 from profanity-im/fix/omemo-leak
Fix memleaks in OMEMO
This commit is contained in:
@@ -1166,6 +1166,7 @@ omemo_trust(const char *const jid, const char *const fingerprint_formatted)
|
|||||||
.name_len = strlen(jid),
|
.name_len = strlen(jid),
|
||||||
.device_id = device_id,
|
.device_id = device_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned char *fingerprint_raw = _omemo_fingerprint_decode(fingerprint_formatted, &len);
|
unsigned char *fingerprint_raw = _omemo_fingerprint_decode(fingerprint_formatted, &len);
|
||||||
unsigned char djb_type[] = {'\x05'};
|
unsigned char djb_type[] = {'\x05'};
|
||||||
signal_buffer *buffer = signal_buffer_create(djb_type, 1);
|
signal_buffer *buffer = signal_buffer_create(djb_type, 1);
|
||||||
@@ -1188,6 +1189,7 @@ omemo_untrust(const char *const jid, const char *const fingerprint_formatted)
|
|||||||
|
|
||||||
GHashTable *trusted = g_hash_table_lookup(omemo_ctx.identity_key_store.trusted, jid);
|
GHashTable *trusted = g_hash_table_lookup(omemo_ctx.identity_key_store.trusted, jid);
|
||||||
if (!trusted) {
|
if (!trusted) {
|
||||||
|
free(identity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ save_identity(const signal_protocol_address *address, uint8_t *key_data,
|
|||||||
|
|
||||||
signal_buffer *buffer = signal_buffer_create(key_data, key_len);
|
signal_buffer *buffer = signal_buffer_create(key_data, key_len);
|
||||||
|
|
||||||
GHashTable *trusted = g_hash_table_lookup(identity_key_store->trusted, strdup(address->name));
|
GHashTable *trusted = g_hash_table_lookup(identity_key_store->trusted, address->name);
|
||||||
if (!trusted) {
|
if (!trusted) {
|
||||||
trusted = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
trusted = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
||||||
g_hash_table_insert(identity_key_store->trusted, strdup(address->name), trusted);
|
g_hash_table_insert(identity_key_store->trusted, strdup(address->name), trusted);
|
||||||
@@ -388,7 +388,7 @@ save_identity(const signal_protocol_address *address, uint8_t *key_data,
|
|||||||
/* Long term storage */
|
/* Long term storage */
|
||||||
char *key_b64 = g_base64_encode(key_data, key_len);
|
char *key_b64 = g_base64_encode(key_data, key_len);
|
||||||
char *device_id = g_strdup_printf("%d", address->device_id);
|
char *device_id = g_strdup_printf("%d", address->device_id);
|
||||||
g_key_file_set_string(omemo_trust_keyfile(), address->name, strdup(device_id), key_b64);
|
g_key_file_set_string(omemo_trust_keyfile(), address->name, device_id, key_b64);
|
||||||
g_free(device_id);
|
g_free(device_id);
|
||||||
g_free(key_b64);
|
g_free(key_b64);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user