replace weird pointer-loops with nice for-loops (thanks @dignifiedquire for guiding)

This commit is contained in:
holger krekel
2019-09-20 17:02:33 +02:00
parent f3ac9306f3
commit fd8d16a7db

View File

@@ -367,7 +367,6 @@ impl<'a> MimeParser<'a> {
return false; return false;
} }
let mut any_part_added = false; let mut any_part_added = false;
let mut cur: *mut clistiter;
if !mailmime_find_ct_parameter( if !mailmime_find_ct_parameter(
mime, mime,
@@ -427,74 +426,37 @@ impl<'a> MimeParser<'a> {
inside mutlipart/alternative, we use this (happens eg in inside mutlipart/alternative, we use this (happens eg in
apple mail: "plaintext" as an alternative to "html+PDF attachment") */ apple mail: "plaintext" as an alternative to "html+PDF attachment") */
DC_MIMETYPE_MP_ALTERNATIVE => { DC_MIMETYPE_MP_ALTERNATIVE => {
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() { if mailmime_get_mime_type(
let childmime: *mut mailmime = (if !cur.is_null() { cur_data as *mut _,
(*cur).data ptr::null_mut(),
} else { ptr::null_mut(),
ptr::null_mut() ) == DC_MIMETYPE_MP_MIXED
})
as *mut mailmime;
if mailmime_get_mime_type(childmime, ptr::null_mut(), ptr::null_mut())
== DC_MIMETYPE_MP_MIXED
{ {
any_part_added = self.parse_mime_recursive(childmime); any_part_added = self.parse_mime_recursive(cur_data as *mut _);
break; break;
} else {
cur = if !cur.is_null() {
(*cur).next
} else {
ptr::null_mut()
}
} }
} }
if !any_part_added { if !any_part_added {
/* search for text/plain and add this */ /* search for text/plain and add this */
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() {
let childmime_0: *mut mailmime = (if !cur.is_null() {
(*cur).data
} else {
ptr::null_mut()
})
as *mut mailmime;
if mailmime_get_mime_type( if mailmime_get_mime_type(
childmime_0, cur_data as *mut _,
ptr::null_mut(), ptr::null_mut(),
ptr::null_mut(), ptr::null_mut(),
) == DC_MIMETYPE_TEXT_PLAIN ) == DC_MIMETYPE_TEXT_PLAIN
{ {
any_part_added = self.parse_mime_recursive(childmime_0); any_part_added = self.parse_mime_recursive(cur_data as *mut _);
break; break;
} else {
cur = if !cur.is_null() {
(*cur).next
} else {
ptr::null_mut()
}
} }
} }
} }
if !any_part_added { if !any_part_added {
/* `text/plain` not found - use the first part */ /* `text/plain` not found - use the first part */
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() { if self.parse_mime_recursive(cur_data as *mut _) {
if 0 != self.parse_mime_recursive( any_part_added = true;
(if !cur.is_null() {
(*cur).data
} else {
ptr::null_mut()
}) as *mut mailmime,
) {
any_part_added = 1i32;
/* out of for() */
break; break;
} else {
cur = if !cur.is_null() {
(*cur).next
} else {
ptr::null_mut()
}
} }
} }
} }
@@ -504,9 +466,10 @@ impl<'a> MimeParser<'a> {
not interesting for us (eg. embedded images) we assume he "root part" not interesting for us (eg. embedded images) we assume he "root part"
being the first one, which may not be always true ... being the first one, which may not be always true ...
however, most times it seems okay. */ however, most times it seems okay. */
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; let cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first;
if !cur.is_null() { if !cur.is_null() {
any_part_added = self.parse_mime_recursive((*cur).data as *mut mailmime); any_part_added =
self.parse_mime_recursive((*cur).data as *mut mailmime);
} }
} }
DC_MIMETYPE_MP_NOT_DECRYPTABLE => { DC_MIMETYPE_MP_NOT_DECRYPTABLE => {
@@ -531,15 +494,10 @@ impl<'a> MimeParser<'a> {
skip the rest. (see skip the rest. (see
https://k9mail.github.io/2016/11/24/OpenPGP-Considerations-Part-I.html https://k9mail.github.io/2016/11/24/OpenPGP-Considerations-Part-I.html
for background information why we use encrypted+signed) */ for background information why we use encrypted+signed) */
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; let cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first;
if !cur.is_null() { if !cur.is_null() {
any_part_added = self.parse_mime_recursive( any_part_added =
(if !cur.is_null() { self.parse_mime_recursive((*cur).data as *mut mailmime);
(*cur).data
} else {
ptr::null_mut()
}) as *mut mailmime,
)
} }
} }
DC_MIMETYPE_MP_REPORT => { DC_MIMETYPE_MP_REPORT => {
@@ -585,56 +543,35 @@ impl<'a> MimeParser<'a> {
let mut html_part = ptr::null_mut(); let mut html_part = ptr::null_mut();
let mut plain_cnt = 0i32; let mut plain_cnt = 0i32;
let mut html_cnt = 0i32; let mut html_cnt = 0i32;
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() { match mailmime_get_mime_type(
let childmime_1 = (if !cur.is_null() { cur_data as *mut _,
(*cur).data
} else {
ptr::null_mut()
}) as *mut mailmime;
if mailmime_get_mime_type(childmime_1, ptr::null_mut(), ptr::null_mut())
== DC_MIMETYPE_TEXT_PLAIN
{
plain_cnt += 1
} else if mailmime_get_mime_type(
childmime_1,
ptr::null_mut(), ptr::null_mut(),
ptr::null_mut(), ptr::null_mut(),
) == DC_MIMETYPE_TEXT_HTML ) {
{ DC_MIMETYPE_TEXT_PLAIN => {
html_part = childmime_1; plain_cnt += 1;
html_cnt += 1 }
} DC_MIMETYPE_TEXT_HTML => {
cur = if !cur.is_null() { html_part = cur_data as *mut mailmime;
(*cur).next html_cnt += 1;
} else { }
ptr::null_mut() _ => {}
} }
} }
if plain_cnt == 1i32 && html_cnt == 1i32 { if plain_cnt == 1 && html_cnt == 1 {
warn!( warn!(
self.context, self.context,
"HACK: multipart/mixed message found with PLAIN and HTML, we\'ll skip the HTML part as this seems to be unwanted." "HACK: multipart/mixed message found with PLAIN and HTML, we\'ll skip the HTML part as this seems to be unwanted."
); );
skip_part = html_part skip_part = html_part
} }
cur = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() { if cur_data as *mut _ != skip_part {
let childmime_2 = (if !cur.is_null() { if self.parse_mime_recursive(cur_data as *mut _) {
(*cur).data
} else {
ptr::null_mut()
}) as *mut mailmime;
if childmime_2 != skip_part {
if self.parse_mime_recursive(childmime_2) {
any_part_added = true; any_part_added = true;
} }
} }
cur = if !cur.is_null() {
(*cur).next
} else {
ptr::null_mut()
}
} }
} }
} }
@@ -1533,23 +1470,11 @@ pub unsafe fn mailmime_find_mailimf_fields(mime: *mut mailmime) -> *mut mailimf_
match (*mime).mm_type as _ { match (*mime).mm_type as _ {
MAILMIME_MULTIPLE => { MAILMIME_MULTIPLE => {
let mut cur: *mut clistiter = (*(*mime).mm_data.mm_multipart.mm_mp_list).first; for cur_data in (*(*mime).mm_data.mm_multipart.mm_mp_list).into_iter() {
while !cur.is_null() { let header = mailmime_find_mailimf_fields(cur_data as *mut _);
let header: *mut mailimf_fields = mailmime_find_mailimf_fields(
(if !cur.is_null() {
(*cur).data
} else {
ptr::null_mut()
}) as *mut mailmime,
);
if !header.is_null() { if !header.is_null() {
return header; return header;
} }
cur = if !cur.is_null() {
(*cur).next
} else {
ptr::null_mut()
}
} }
} }
MAILMIME_MESSAGE => return (*mime).mm_data.mm_message.mm_fields, MAILMIME_MESSAGE => return (*mime).mm_data.mm_message.mm_fields,
@@ -1566,14 +1491,10 @@ pub unsafe fn mailimf_find_optional_field(
if header.is_null() || (*header).fld_list.is_null() { if header.is_null() || (*header).fld_list.is_null() {
return ptr::null_mut(); return ptr::null_mut();
} }
let mut cur1: *mut clistiter = (*(*header).fld_list).first; for cur_data in (*(*header).fld_list).into_iter() {
while !cur1.is_null() { let field: *mut mailimf_field = cur_data as *mut _;
let field: *mut mailimf_field = (if !cur1.is_null() {
(*cur1).data if (*field).fld_type == MAILIMF_FIELD_OPTIONAL_FIELD as libc::c_int {
} else {
ptr::null_mut()
}) as *mut mailimf_field;
if !field.is_null() && (*field).fld_type == MAILIMF_FIELD_OPTIONAL_FIELD as libc::c_int {
let optional_field: *mut mailimf_optional_field = (*field).fld_data.fld_optional_field; let optional_field: *mut mailimf_optional_field = (*field).fld_data.fld_optional_field;
if !optional_field.is_null() if !optional_field.is_null()
&& !(*optional_field).fld_name.is_null() && !(*optional_field).fld_name.is_null()
@@ -1583,11 +1504,6 @@ pub unsafe fn mailimf_find_optional_field(
return optional_field; return optional_field;
} }
} }
cur1 = if !cur1.is_null() {
(*cur1).next
} else {
ptr::null_mut()
}
} }
ptr::null_mut() ptr::null_mut()