mirror of
https://github.com/chatmail/core.git
synced 2026-05-09 01:46:30 +03:00
replace weird pointer-loops with nice for-loops (thanks @dignifiedquire for guiding)
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user