diff --git a/src/dc_tools.rs b/src/dc_tools.rs index 9513d21fe..af0aba110 100644 --- a/src/dc_tools.rs +++ b/src/dc_tools.rs @@ -51,75 +51,6 @@ pub unsafe fn dc_strdup(s: *const libc::c_char) -> *mut libc::c_char { ret } -unsafe fn dc_ltrim(buf: *mut libc::c_char) { - let mut len: libc::size_t; - let mut cur: *const libc::c_uchar; - if !buf.is_null() && 0 != *buf as libc::c_int { - len = strlen(buf); - cur = buf as *const libc::c_uchar; - while 0 != *cur as libc::c_int && 0 != libc::isspace(*cur as libc::c_int) { - cur = cur.offset(1isize); - len = len.wrapping_sub(1) - } - if buf as *const libc::c_uchar != cur { - libc::memmove( - buf as *mut libc::c_void, - cur as *const libc::c_void, - len.wrapping_add(1), - ); - } - }; -} - -unsafe fn dc_rtrim(buf: *mut libc::c_char) { - let mut len: libc::size_t; - let mut cur: *mut libc::c_uchar; - if !buf.is_null() && 0 != *buf as libc::c_int { - len = strlen(buf); - cur = (buf as *mut libc::c_uchar) - .offset(len as isize) - .offset(-1isize); - while cur != buf as *mut libc::c_uchar && 0 != libc::isspace(*cur as libc::c_int) { - cur = cur.offset(-1isize); - len = len.wrapping_sub(1) - } - *cur.offset( - (if 0 != libc::isspace(*cur as libc::c_int) { - 0 - } else { - 1 - }) as isize, - ) = '\u{0}' as i32 as libc::c_uchar - }; -} - -pub(crate) unsafe fn dc_trim(buf: *mut libc::c_char) { - dc_ltrim(buf); - dc_rtrim(buf); -} - -/* remove all \r characters from string */ -pub(crate) unsafe fn dc_remove_cr_chars(buf: *mut libc::c_char) { - /* search for first `\r` */ - let mut p1: *const libc::c_char = buf; - while 0 != *p1 { - if *p1 as libc::c_int == '\r' as i32 { - break; - } - p1 = p1.offset(1isize) - } - /* p1 is `\r` or null-byte; start removing `\r` */ - let mut p2: *mut libc::c_char = p1 as *mut libc::c_char; - while 0 != *p1 { - if *p1 as libc::c_int != '\r' as i32 { - *p2 = *p1; - p2 = p2.offset(1isize) - } - p1 = p1.offset(1isize) - } - *p2 = 0 as libc::c_char; -} - /// Shortens a string to a specified length and adds "..." or "[...]" to the end of /// the shortened string. pub(crate) fn dc_truncate(buf: &str, approx_chars: usize, do_unwrap: bool) -> Cow { @@ -631,26 +562,6 @@ pub(crate) fn dc_get_next_backup_path( } bail!("could not create backup file, disk full?"); } -pub(crate) fn dc_get_fine_path_filename( - context: &Context, - folder: impl AsRef, - backup_time: i64, -) -> Result { - let folder = PathBuf::from(folder.as_ref()); - let stem = chrono::NaiveDateTime::from_timestamp(backup_time, 0) - .format("delta-chat-%Y-%m-%d") - .to_string(); - - // 64 backup files per day should be enough for everyone - for i in 0..64 { - let mut path = folder.clone(); - path.push(format!("{}-{}.bak", stem, i)); - if !path.exists() { - return Ok(path); - } - } - bail!("could not create backup file, disk full?"); -} pub(crate) fn dc_is_blobdir_path(context: &Context, path: impl AsRef) -> bool { context @@ -1044,54 +955,6 @@ mod tests { } } - #[test] - fn test_dc_ltrim() { - unsafe { - let html: *const libc::c_char = - b"\r\r\nline1
\r\n\r\n\r\rline2\n\r\x00" as *const u8 as *const libc::c_char; - let out: *mut libc::c_char = strndup(html, strlen(html) as libc::c_ulong); - - dc_ltrim(out); - - assert_eq!( - CStr::from_ptr(out as *const libc::c_char).to_str().unwrap(), - "line1
\r\n\r\n\r\rline2\n\r" - ); - } - } - - #[test] - fn test_dc_rtrim() { - unsafe { - let html: *const libc::c_char = - b"\r\r\nline1
\r\n\r\n\r\rline2\n\r\x00" as *const u8 as *const libc::c_char; - let out: *mut libc::c_char = strndup(html, strlen(html) as libc::c_ulong); - - dc_rtrim(out); - - assert_eq!( - CStr::from_ptr(out as *const libc::c_char).to_str().unwrap(), - "\r\r\nline1
\r\n\r\n\r\rline2" - ); - } - } - - #[test] - fn test_dc_trim() { - unsafe { - let html: *const libc::c_char = - b"\r\r\nline1
\r\n\r\n\r\rline2\n\r\x00" as *const u8 as *const libc::c_char; - let out: *mut libc::c_char = strndup(html, strlen(html) as libc::c_ulong); - - dc_trim(out); - - assert_eq!( - CStr::from_ptr(out as *const libc::c_char).to_str().unwrap(), - "line1
\r\n\r\n\r\rline2" - ); - } - } - #[test] fn test_rust_ftoa() { assert_eq!("1.22", format!("{}", 1.22)); @@ -1560,19 +1423,4 @@ mod tests { let listflags: u32 = DC_GCL_VERIFIED_ONLY.try_into().unwrap(); assert!(listflags_has(listflags, DC_GCL_ADD_SELF) == false); } - - #[test] - fn test_dc_remove_cr_chars() { - unsafe { - let input = "foo\r\nbar".strdup(); - dc_remove_cr_chars(input); - assert_eq!("foo\nbar", to_string_lossy(input)); - free(input.cast()); - - let input = "\rfoo\r\rbar\r".strdup(); - dc_remove_cr_chars(input); - assert_eq!("foobar", to_string_lossy(input)); - free(input.cast()); - } - } } diff --git a/src/imex.rs b/src/imex.rs index 1e5b2ba4b..82d7232b1 100644 --- a/src/imex.rs +++ b/src/imex.rs @@ -319,7 +319,7 @@ fn set_self_key( } fn decrypt_setup_file( - context: &Context, + _context: &Context, passphrase: &str, file: T, ) -> Result { @@ -592,7 +592,6 @@ fn import_self_keys(context: &Context, dir: impl AsRef) -> Result<()> { Maybe we should make the "default" key handlong also a little bit smarter (currently, the last imported key is the standard key unless it contains the string "legacy" in its name) */ let mut set_default: bool; - let mut key: String; let mut imported_cnt = 0; let dir_name = dir.as_ref().to_string_lossy(); @@ -806,7 +805,7 @@ mod tests { assert!(!base64.is_empty()); - let mut setup_file = S_EM_SETUPFILE.to_string(); + let setup_file = S_EM_SETUPFILE.to_string(); let decrypted = decrypt_setup_file( context, S_EM_SETUPCODE, @@ -814,7 +813,7 @@ mod tests { ) .unwrap(); - let (typ, headers, base64) = split_armored_data(&buf_1).unwrap(); + let (typ, headers, _base64) = split_armored_data(decrypted.as_bytes()).unwrap(); assert_eq!(typ, BlockType::PrivateKey); assert_eq!(headers.get(HEADER_AUTOCRYPT), Some(&"mutual".to_string())); diff --git a/src/pgp.rs b/src/pgp.rs index 9fb3b795e..5565659bb 100644 --- a/src/pgp.rs +++ b/src/pgp.rs @@ -40,7 +40,7 @@ pub fn split_armored_data( let headers = dearmor .headers .into_iter() - .map(|(key, value)| (key.to_lowercase(), value)) + .map(|(key, value)| (key.trim().to_lowercase(), value.trim().to_string())) .collect(); Ok((typ, headers, bytes)) @@ -218,7 +218,7 @@ mod tests { use super::*; #[test] - fn test_split_armored_data() { + fn test_split_armored_data_1() { let (typ, _headers, base64) = split_armored_data( b"-----BEGIN PGP MESSAGE-----\nNoVal:\n\naGVsbG8gd29ybGQ=\n-----END PGP MESSAGE----", ) @@ -230,36 +230,12 @@ mod tests { std::string::String::from_utf8(base64).unwrap(), "hello world" ); + } - let (typ, _headers, base64) = - split_armored_data(b"-----BEGIN PGP MESSAGE-----\n\ndat1\n-----END PGP MESSAGE-----\n-----BEGIN PGP MESSAGE-----\n\ndat2\n-----END PGP MESSAGE-----") - .unwrap(); - - assert_eq!(typ, BlockType::Message); - assert!(!base64.is_empty()); - - let (typ, _headers, base64) = split_armored_data( - b"foo \n -----BEGIN PGP MESSAGE----- \n base64-123 \n -----END PGP MESSAGE-----", - ) - .unwrap(); - - assert_eq!(typ, BlockType::Message); - assert!(!base64.is_empty()); - - assert!(split_armored_data(b"foo-----BEGIN PGP MESSAGE-----",).is_err()); - + #[test] + fn test_split_armored_data_2() { let (typ, headers, base64) = split_armored_data( - b"foo \n -----BEGIN PGP MESSAGE-----\n Passphrase-BeGIN : 23 \n \n base64-567 \r\n abc \n -----END PGP MESSAGE-----\n\n\n", - ) - .unwrap(); - - assert_eq!(typ, BlockType::Message); - assert!(!base64.is_empty()); - - assert_eq!(headers.get(HEADER_SETUPCODE), Some(&"23".to_string())); - - let (typ, headers, base64) = split_armored_data( - b"-----BEGIN PGP PRIVATE KEY BLOCK-----\n Autocrypt-Prefer-Encrypt : mutual \n\nbase64\n-----END PGP PRIVATE KEY BLOCK-----" + b"-----BEGIN PGP PRIVATE KEY BLOCK-----\nAutocrypt-Prefer-Encrypt: mutual \n\nbase64\n-----END PGP PRIVATE KEY BLOCK-----" ) .unwrap();