Pass attachment names through decoding
Attachment names in Content-Type parameters can be encoded (eg =?UTF-8...), so try decoding with phrase() firstembed
parent
19ec6e54fc
commit
250129665b
|
@ -787,6 +787,7 @@ named_args!(pub parts<'a>(boundary: &'a [u8]) < Vec<&'this_is_probably_unique_i_
|
||||||
( { Vec::<&[u8]>::new() } ))
|
( { Vec::<&[u8]>::new() } ))
|
||||||
));
|
));
|
||||||
|
|
||||||
|
/* Caution: values should be passed through phrase() */
|
||||||
named!(
|
named!(
|
||||||
content_type_parameter<(&[u8], &[u8])>,
|
content_type_parameter<(&[u8], &[u8])>,
|
||||||
do_parse!(
|
do_parse!(
|
||||||
|
@ -1190,5 +1191,4 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -875,13 +875,18 @@ impl Component for MailView {
|
||||||
ContentType::Other { ref name, .. } => {
|
ContentType::Other { ref name, .. } => {
|
||||||
let attachment_type = u.mime_type();
|
let attachment_type = u.mime_type();
|
||||||
let binary = query_default_app(&attachment_type);
|
let binary = query_default_app(&attachment_type);
|
||||||
|
let mut name_opt = name.as_ref().and_then(|n| {
|
||||||
|
melib::email::parser::phrase(n.as_bytes())
|
||||||
|
.to_full_result()
|
||||||
|
.ok()
|
||||||
|
.and_then(|n| String::from_utf8(n).ok())
|
||||||
|
});
|
||||||
|
if name_opt.is_none() {
|
||||||
|
name_opt = name.as_ref().map(|n| n.clone());
|
||||||
|
}
|
||||||
if let Ok(binary) = binary {
|
if let Ok(binary) = binary {
|
||||||
let p = create_temp_file(
|
let p =
|
||||||
&decode(u, None),
|
create_temp_file(&decode(u, None), name_opt, None, true);
|
||||||
name.as_ref().map(|n| n.clone()),
|
|
||||||
None,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
Command::new(&binary)
|
Command::new(&binary)
|
||||||
.arg(p.path())
|
.arg(p.path())
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
|
|
Loading…
Reference in New Issue