From dcc65d7d37f3ad4758667cbed3aff743c15e817d Mon Sep 17 00:00:00 2001 From: Doug Nelson Date: Wed, 15 Oct 2025 10:42:06 +0100 Subject: [PATCH] fix: question marks are not correctly encoded --- src/encode.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/encode.rs b/src/encode.rs index 889022d..aab92d2 100644 --- a/src/encode.rs +++ b/src/encode.rs @@ -72,7 +72,7 @@ fn rfc2047_encode_word(word: &str) -> String { if b == ' ' { result.push('_'); at += 1; - } else if b.is_ascii() && b != '_' && b != '=' { + } else if b.is_ascii() && b != '_' && b != '=' && b != '?' { result.push(b); at += 1; } else { @@ -98,6 +98,11 @@ mod tests { assert_eq!("foo \n bar", rfc2047_encode("foo \n bar")); } + #[test] + fn just_ascii_with_qmark() { + assert_eq!("foo? bar!", rfc2047_encode("foo? bar!")); + } + #[test] fn just_whitespace() { assert_eq!(" ", rfc2047_encode(" ")); @@ -118,6 +123,14 @@ mod tests { assert_eq!("=?utf-8?q?foo=C3=A1bar?=", rfc2047_encode("fooábar")); } + #[test] + fn encoded_qmark() { + assert_eq!( + "=?utf-8?q?c=C3=A1t=3F?=", + rfc2047_encode("cát?") + ); + } + #[test] fn encoded_at_start() { assert_eq!("=?utf-8?q?=C3=A4?= bar", rfc2047_encode("ä bar"));