diff --git a/src/e2ee.rs b/src/e2ee.rs index c0a62e49f..244284c52 100644 --- a/src/e2ee.rs +++ b/src/e2ee.rs @@ -336,16 +336,16 @@ impl E2eeHelper { if let Some(ref mut peerstate) = peerstate { if let Some(ref header) = autocryptheader { peerstate.apply_header(&header, message_time); - peerstate.save_to_db(&context.sql, false).unwrap(); + peerstate.save_to_db(&context.sql, false)?; } else if message_time > peerstate.last_seen_autocrypt && !contains_report(in_out_message) { peerstate.degrade_encryption(message_time); - peerstate.save_to_db(&context.sql, false).unwrap(); + peerstate.save_to_db(&context.sql, false)?; } } else if let Some(ref header) = autocryptheader { let p = Peerstate::from_header(context, header, message_time); - p.save_to_db(&context.sql, true).unwrap(); + p.save_to_db(&context.sql, true)?; peerstate = Some(p); } } @@ -364,7 +364,7 @@ impl E2eeHelper { } if let Some(ref peerstate) = peerstate { if peerstate.degrade_event.is_some() { - handle_degrade_event(context, &peerstate); + handle_degrade_event(context, &peerstate)?; } if let Some(ref key) = peerstate.gossip_key { public_keyring_for_validate.add_ref(key); @@ -395,7 +395,7 @@ impl E2eeHelper { message_time, imffields, gossip_headers, - ) + )?; } } } @@ -493,7 +493,7 @@ unsafe fn update_gossip_peerstates( message_time: i64, imffields: *mut mailimf_fields, gossip_headers: *const mailimf_fields, -) -> HashSet { +) -> Result> { // XXX split the parsing from the modification part let mut recipients: Option> = None; let mut gossipped_addr: HashSet = Default::default(); @@ -522,15 +522,15 @@ unsafe fn update_gossip_peerstates( Peerstate::from_addr(context, &context.sql, &header.addr); if let Some(ref mut peerstate) = peerstate { peerstate.apply_gossip(header, message_time); - peerstate.save_to_db(&context.sql, false).unwrap(); + peerstate.save_to_db(&context.sql, false)?; } else { let p = Peerstate::from_gossip(context, header, message_time); - p.save_to_db(&context.sql, true).unwrap(); + p.save_to_db(&context.sql, true)?; peerstate = Some(p); } if let Some(peerstate) = peerstate { if peerstate.degrade_event.is_some() { - handle_degrade_event(context, &peerstate); + handle_degrade_event(context, &peerstate)?; } } @@ -547,7 +547,7 @@ unsafe fn update_gossip_peerstates( } } - gossipped_addr + Ok(gossipped_addr) } fn decrypt_if_autocrypt_message( diff --git a/src/securejoin.rs b/src/securejoin.rs index 788670b28..c451c07f6 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -718,21 +718,24 @@ fn encrypted_and_signed(mimeparser: &MimeParser, expected_fingerprint: impl AsRe } } -pub fn handle_degrade_event(context: &Context, peerstate: &Peerstate) { +pub fn handle_degrade_event(context: &Context, peerstate: &Peerstate) -> Result<(), Error> { // - we do not issue an warning for DC_DE_ENCRYPTION_PAUSED as this is quite normal // - currently, we do not issue an extra warning for DC_DE_VERIFICATION_LOST - this always comes // together with DC_DE_FINGERPRINT_CHANGED which is logged, the idea is not to bother // with things they cannot fix, so the user is just kicked from the verified group // (and he will know this and can fix this) if Some(DegradeEvent::FingerprintChanged) == peerstate.degrade_event { - let contact_id: i32 = context - .sql - .query_get_value( - context, - "SELECT id FROM contacts WHERE addr=?;", - params![&peerstate.addr], - ) - .unwrap_or_default(); + let contact_id: i32 = match context.sql.query_get_value( + context, + "SELECT id FROM contacts WHERE addr=?;", + params![&peerstate.addr], + ) { + None => bail!( + "contact with peerstate.addr {:?} not found", + &peerstate.addr + ), + Some(contact_id) => contact_id, + }; if contact_id > 0 { let (contact_chat_id, _) = chat::create_or_lookup_by_contact_id(context, contact_id as u32, Blocked::Deaddrop) @@ -748,4 +751,5 @@ pub fn handle_degrade_event(context: &Context, peerstate: &Peerstate) { emit_event!(context, Event::ChatModified(contact_chat_id)); } } + Ok(()) } diff --git a/src/wrapmime.rs b/src/wrapmime.rs index ac3b704cb..fa1f900e0 100644 --- a/src/wrapmime.rs +++ b/src/wrapmime.rs @@ -36,7 +36,6 @@ pub fn get_ct_subtype(mime: *mut Mailmime) -> Option { let ct: *mut mailmime_content = (*mime).mm_content_type; if !ct.is_null() && !(*ct).ct_subtype.is_null() { - println!("ct_subtype: {}", to_string((*ct).ct_subtype)); Some(to_string((*ct).ct_subtype)) } else { None @@ -48,10 +47,12 @@ pub fn get_autocrypt_mime( mime_undetermined: *mut Mailmime, ) -> Result<(*mut Mailmime, *mut Mailmime), Error> { /* return Result with two mime pointers: - First mime pointer is to the multipart-mime message - (which is replaced with a decrypted version later) - Second one is to the encrypted payload. - For non-autocrypt message an Error is returned. + + First mime pointer is to the multipart-mime message + (which is replaced with a decrypted version later) + + Second one is to the encrypted payload. + For non-autocrypt message an Error is returned. */ unsafe { ensure!(