diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index b9e4095..9212496 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -51,6 +51,7 @@ fn encode_as_png(image: &ImageData) -> Result, Error> { fn paths_from_uri_list(uri_list: Vec) -> Vec { uri_list .split(|char| *char == b'\n') + .map(|line| line.strip_suffix(b"\r").unwrap_or(line)) .filter_map(|line| line.strip_prefix(b"file://")) .filter_map(|s| percent_decode(s).decode_utf8().ok()) .map(|decoded| PathBuf::from(decoded.as_ref())) @@ -84,7 +85,10 @@ fn paths_to_uri_list(file_list: &[impl AsRef]) -> Result { format!("file://{}", percent_encode(path.as_os_str().as_bytes(), ASCII_SET)) }) }) - .reduce(|uri_list, uri| uri_list + "\n" + &uri) + // Use CRLF ("\r\n") per RFC 2045 section 2.10: + // https://www.rfc-editor.org/rfc/rfc2045#section-2.10 + // Ensures compliance and future-proofing. + .reduce(|uri_list, uri| uri_list + "\r\n" + &uri) .ok_or(Error::ConversionFailure) } @@ -460,6 +464,6 @@ mod tests { PathBuf::from("/tmp/foo?.png"), PathBuf::from("/tmp/white space.txt"), ]; - assert_eq!(paths_from_uri_list(file_list.join("\n").into()), paths); + assert_eq!(paths_from_uri_list(file_list.join("\r\n").into()), paths); } }