From 9eededdbaaa76c3a4ab8c41bf814fad0c442880a Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Tue, 28 Apr 2026 11:03:55 +0200 Subject: [PATCH 1/2] Properly encode/decode MIME=text/uri-list In all the text/* formats the lines are terminated with a CRLF pair. Fixes #216 --- src/platform/linux/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index b9e4095..44746ef 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,7 @@ 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) + .reduce(|uri_list, uri| uri_list + "\r\n" + &uri) .ok_or(Error::ConversionFailure) } @@ -460,6 +461,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); } } From 46822b3c400fb02c7a6a90451a5e6ec1c300cf95 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Wed, 29 Apr 2026 09:06:30 +0200 Subject: [PATCH 2/2] Link RFC2045 spec --- src/platform/linux/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 44746ef..9212496 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -85,6 +85,9 @@ fn paths_to_uri_list(file_list: &[impl AsRef]) -> Result { format!("file://{}", percent_encode(path.as_os_str().as_bytes(), ASCII_SET)) }) }) + // 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) }