diff --git a/src/dc_contact.rs b/src/dc_contact.rs index 099dbf7be..b4a69e528 100644 --- a/src/dc_contact.rs +++ b/src/dc_contact.rs @@ -848,13 +848,16 @@ pub unsafe fn dc_get_contact_encrinfo( fingerprint_other_unverified, ); } else { - let c_addr = peerstate.addr.as_ref().map(to_cstring); + let c_addr = peerstate.addr.as_ref().map(to_cstring).unwrap_or_default(); + let addr_ptr = if peerstate.addr.is_some() { + c_addr.as_ptr() + } else { + std::ptr::null() + }; cat_fingerprint( &mut ret, - c_addr - .map(|a| a.as_ptr()) - .unwrap_or_else(|| std::ptr::null()), + addr_ptr, fingerprint_other_verified, fingerprint_other_unverified, ); diff --git a/src/dc_qr.rs b/src/dc_qr.rs index 8eab42086..683091e51 100644 --- a/src/dc_qr.rs +++ b/src/dc_qr.rs @@ -245,13 +245,20 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc if addr.is_null() || invitenumber.is_null() || auth.is_null() { if let Some(peerstate) = peerstate { (*qr_parsed).state = 210i32; - let c_addr = peerstate.addr.as_ref().map(to_cstring); + let c_addr = peerstate + .addr + .as_ref() + .map(to_cstring) + .unwrap_or_default(); + let addr_ptr = if peerstate.addr.is_some() { + c_addr.as_ptr() + } else { + std::ptr::null() + }; (*qr_parsed).id = dc_add_or_lookup_contact( context, 0 as *const libc::c_char, - c_addr - .map(|a| a.as_ptr()) - .unwrap_or_else(|| std::ptr::null()), + addr_ptr, 0x80i32, 0 as *mut libc::c_int, ); diff --git a/src/peerstate.rs b/src/peerstate.rs index c17959306..c3ed758a3 100644 --- a/src/peerstate.rs +++ b/src/peerstate.rs @@ -543,22 +543,17 @@ impl<'a> Peerstate<'a> { as *const u8 as *const libc::c_char) }; - let addr_c = self.addr.as_ref().map(|fp| to_cstring(fp)); + let c_addr = self.addr.as_ref().map(to_cstring).unwrap_or_default(); + let addr_ptr = if self.addr.is_some() { + c_addr.as_ptr() + } else { + std::ptr::null() + }; unsafe { sqlite3_bind_int64(stmt, 1, self.last_seen as sqlite3_int64) }; unsafe { sqlite3_bind_int64(stmt, 2, self.last_seen_autocrypt as sqlite3_int64) }; unsafe { sqlite3_bind_int64(stmt, 3, self.gossip_timestamp as sqlite3_int64) }; - unsafe { - sqlite3_bind_text( - stmt, - 4, - addr_c - .map(|addr| addr.as_ptr()) - .unwrap_or_else(|| std::ptr::null()), - -1, - SQLITE_TRANSIENT(), - ) - }; + unsafe { sqlite3_bind_text(stmt, 4, addr_ptr, -1, SQLITE_TRANSIENT()) }; if unsafe { sqlite3_step(stmt) } == 101 { success = true;