diff --git a/src/imap.rs b/src/imap.rs index 0092dd1ed..951909810 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -558,12 +558,7 @@ impl Imap { Some(ref mut session) => { if let Ok(caps) = session.capabilities() { if !context.sql.is_open() { - warn!( - context, - 0, - "IMAP-LOGIN as {} ok but ABORTING", - lp.mail_user, - ); + warn!(context, 0, "IMAP-LOGIN as {} ok but ABORTING", lp.mail_user,); teardown = true; } else { let can_idle = caps.has("IDLE"); diff --git a/src/sql.rs b/src/sql.rs index 4863d8ecd..da37d53a3 100644 --- a/src/sql.rs +++ b/src/sql.rs @@ -141,7 +141,7 @@ impl Sql { } pub fn table_exists(&self, name: impl AsRef) -> bool { - self.with_conn(|conn| Ok(table_exists(conn, name))) + self.with_conn(|conn| table_exists(conn, name)) .unwrap_or_default() } @@ -261,16 +261,14 @@ impl Sql { } } -fn table_exists(conn: &Connection, name: impl AsRef) -> bool { +fn table_exists(conn: &Connection, name: impl AsRef) -> Result { let mut exists = false; conn.pragma(None, "table_info", &format!("{}", name.as_ref()), |_row| { // will only be executed if the info was found exists = true; Ok(()) - }) - .expect("bad sqlite state"); - - exists + })?; + Ok(exists) } fn open( diff --git a/tests/stress.rs b/tests/stress.rs index 88f6a26b9..1835737e9 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -998,6 +998,20 @@ fn test_chat() { } } +#[test] +fn test_wrong_db() { + unsafe { + let mut ctx = dc_context_new(Some(cb), std::ptr::null_mut(), std::ptr::null_mut()); + let dir = tempdir().unwrap(); + let dbfile = dir.path().join("db.sqlite"); + std::fs::write(&dbfile, b"123").unwrap(); + + let dbfile_c = CString::new(dbfile.to_str().unwrap()).unwrap(); + let res = dc_open(&mut ctx, dbfile_c.as_ptr(), std::ptr::null()); + assert_eq!(res, 0); + } +} + #[test] fn test_arr_to_string() { let arr2: [uint32_t; 4] = [