From 8bfc20506cc5e098fe6eb3d1cafe3bea791215ce Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Sat, 22 May 2021 19:58:27 +0200 Subject: [PATCH] fix(transport-smtp): Fix transparency codec - 0.9.x (#628) Co-authored-by: Paolo Barbolini --- lettre/src/smtp/client/mod.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lettre/src/smtp/client/mod.rs b/lettre/src/smtp/client/mod.rs index e91c1a9..0c88c3f 100644 --- a/lettre/src/smtp/client/mod.rs +++ b/lettre/src/smtp/client/mod.rs @@ -51,7 +51,15 @@ impl ClientCodec { match self.escape_count { 0 => self.escape_count = if *byte == b'\r' { 1 } else { 0 }, 1 => self.escape_count = if *byte == b'\n' { 2 } else { 0 }, - 2 => self.escape_count = if *byte == b'.' { 3 } else { 0 }, + 2 => { + self.escape_count = if *byte == b'.' { + 3 + } else if *byte == b'\r' { + 1 + } else { + 0 + } + } _ => unreachable!(), } if self.escape_count == 3 { @@ -286,6 +294,7 @@ mod test { let mut buf: Vec = vec![]; assert!(codec.encode(b"test\r\n", &mut buf).is_ok()); + assert!(codec.encode(b"test\r\n\r\n", &mut buf).is_ok()); assert!(codec.encode(b".\r\n", &mut buf).is_ok()); assert!(codec.encode(b"\r\ntest", &mut buf).is_ok()); assert!(codec.encode(b"te\r\n.\r\nst", &mut buf).is_ok()); @@ -296,7 +305,7 @@ mod test { assert!(codec.encode(b"test", &mut buf).is_ok()); assert_eq!( String::from_utf8(buf).unwrap(), - "test\r\n..\r\n\r\ntestte\r\n..\r\nsttesttest.test\n.test\ntest" + "test\r\ntest\r\n\r\n..\r\n\r\ntestte\r\n..\r\nsttesttest.test\n.test\ntest" ); }