Fix: issue #112 follow-ups — OTR strip, presence UAF, OMEMO load #130
@@ -1283,8 +1283,12 @@ omemo_is_trusted_identity(const char* const jid, const char* const fingerprint)
|
||||
.device_id = GPOINTER_TO_UINT(device_id),
|
||||
};
|
||||
|
||||
size_t fingerprint_len;
|
||||
size_t fingerprint_len = 0;
|
||||
unsigned char* fingerprint_raw = _omemo_fingerprint_decode(fingerprint, &fingerprint_len);
|
||||
if (!fingerprint_raw) {
|
||||
log_error("[OMEMO] omemo_is_trusted_identity: failed to decode fingerprint for %s", jid);
|
||||
return FALSE;
|
||||
}
|
||||
unsigned char djb_type[] = { '\x05' };
|
||||
signal_buffer* buffer = signal_buffer_create(djb_type, 1);
|
||||
buffer = signal_buffer_append(buffer, fingerprint_raw, fingerprint_len);
|
||||
@@ -1468,6 +1472,10 @@ _omemo_fingerprint(ec_public_key* identity, gboolean formatted)
|
||||
static unsigned char*
|
||||
_omemo_fingerprint_decode(const char* const fingerprint, size_t* len)
|
||||
{
|
||||
if (!fingerprint) {
|
||||
*len = 0;
|
||||
return NULL;
|
||||
}
|
||||
unsigned char* output = malloc(strlen(fingerprint) / 2 + 1);
|
||||
if (!output) {
|
||||
*len = 0;
|
||||
@@ -1534,6 +1542,11 @@ omemo_trust(const char* const jid, const char* const fingerprint_formatted)
|
||||
};
|
||||
|
||||
unsigned char* fingerprint_raw = _omemo_fingerprint_decode(fingerprint_formatted, &len);
|
||||
if (!fingerprint_raw) {
|
||||
log_error("[OMEMO] omemo_trust: failed to decode fingerprint for %s", jid);
|
||||
cons_show_error("Failed to trust device: could not decode fingerprint.");
|
||||
return;
|
||||
}
|
||||
unsigned char djb_type[] = { '\x05' };
|
||||
signal_buffer* buffer = signal_buffer_create(djb_type, 1);
|
||||
buffer = signal_buffer_append(buffer, fingerprint_raw, len);
|
||||
@@ -1551,8 +1564,10 @@ omemo_untrust(const char* const jid, const char* const fingerprint_formatted)
|
||||
{
|
||||
size_t len;
|
||||
unsigned char* identity = _omemo_fingerprint_decode(fingerprint_formatted, &len);
|
||||
if (!identity)
|
||||
if (!identity) {
|
||||
log_error("[OMEMO] omemo_untrust: failed to decode fingerprint for %s", jid);
|
||||
return;
|
||||
}
|
||||
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
Reference in New Issue
Block a user