From 623d69c5536b9638f3bfd50b6eca945df5300482 Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Mon, 2 Aug 2021 11:42:56 +0200 Subject: [PATCH] Fix #653 (#654) --- src/message/header/mod.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/message/header/mod.rs b/src/message/header/mod.rs index 54e372a..bb82be2 100644 --- a/src/message/header/mod.rs +++ b/src/message/header/mod.rs @@ -411,13 +411,14 @@ impl HeaderValueEncoder { let mut next_word = next_word; while !next_word.is_empty() { - if self.remaining_line_len() <= base64_len(1) { + let mut len = available_len_to_max_encode_len(self.remaining_line_len()) + .min(next_word.len()); + + if len == 0 { self.flush_encode_buf(f, false)?; self.new_line(f)?; } - let mut len = available_len_to_max_encode_len(self.remaining_line_len()) - .min(next_word.len()); // avoid slicing on a char boundary while !next_word.is_char_boundary(len) { len += 1; @@ -800,4 +801,21 @@ mod tests { ) ); } + + #[test] + fn issue_653() { + let mut headers = Headers::new(); + headers.insert_raw( + HeaderName::new_from_ascii_str("Subject"), + "+仮名 :a;go; ;;;;;s;;;;;;;;;;;;;;;;fffeinmjgggggggggfっ".to_string(), + ); + + assert_eq!( + headers.to_string(), + concat!( + "Subject: =?utf-8?b?77yL5Luu5ZCN?= :a;go; \r\n", + " =?utf-8?b?Ozs7OztzOzs7Ozs7Ozs7Ozs7Ozs7O2ZmZmVpbm1qZ2dnZ2dnZ2dn772G44Gj?=\r\n" + ) + ); + } }