diff --git a/src/dc_mimeparser.rs b/src/dc_mimeparser.rs index 65ed62f71..d92757390 100644 --- a/src/dc_mimeparser.rs +++ b/src/dc_mimeparser.rs @@ -766,14 +766,11 @@ impl<'a> MimeParser<'a> { // XXX what if somebody sends eg an "location-highlights.kml" // attachment unrelated to location streaming? if filename.starts_with("location") || filename.starts_with("message") { - let d = std::string::String::from_utf8_lossy(&decoded_data); - let parsed = match location::Kml::parse(self.context, &d) { - Ok(res) => Some(res), - Err(err) => { + let parsed = location::Kml::parse(self.context, decoded_data) + .map_err(|err| { warn!(self.context, "failed to parse kml part: {}", err); - None - } - }; + }) + .ok(); if filename.starts_with("location") { self.location_kml = parsed; } else { diff --git a/src/location.rs b/src/location.rs index 950aebaa3..555088ea9 100644 --- a/src/location.rs +++ b/src/location.rs @@ -62,14 +62,11 @@ impl Kml { Default::default() } - pub fn parse(context: &Context, content: impl AsRef) -> Result { - ensure!( - content.as_ref().len() <= (1024 * 1024), - "A kml-files with {} bytes is larger than reasonably expected.", - content.as_ref().len() - ); + pub fn parse(context: &Context, content: &[u8]) -> Result { + ensure!(content.len() <= (1024 * 1024), "kml-file too large"); - let mut reader = quick_xml::Reader::from_str(content.as_ref()); + let to_parse = String::from_utf8_lossy(content); + let mut reader = quick_xml::Reader::from_str(&to_parse); reader.trim_text(true); let mut kml = Kml::new(); @@ -674,7 +671,7 @@ mod tests { let xml = "\n\n\n2019-03-06T21:09:57Z9.423110,53.790302\n\n \n\t2018-12-13T22:11:12Z\t 19.423110 \t , \n 63.790302\n \n\n"; - let kml = Kml::parse(&context.ctx, &xml).expect("parsing failed"); + let kml = Kml::parse(&context.ctx, &(xml.as_bytes())).expect("parsing failed"); assert!(kml.addr.is_some()); assert_eq!(kml.addr.as_ref().unwrap(), "user@example.org",); diff --git a/src/mimefactory.rs b/src/mimefactory.rs index c5c681b21..8e0edfbad 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -503,10 +503,6 @@ impl<'a> MimeFactory<'a> { if location::is_sending_locations_to_chat(context, self.msg.chat_id) { match location::get_kml(context, self.msg.chat_id) { Ok((kml_content, last_added_location_id)) => { - info!( - context, - "adding location.kml to mime message: {}", kml_content - ); wrapmime::add_filename_part( message, "location.kml",