fix(transport-smtp): Fix transparency codec (#627)
It fails to add transparency when a period is preceded by two successive CRLF. Co-authored-by: Paolo Barbolini <paolo@paolo565.org>
This commit is contained in:
@@ -78,7 +78,15 @@ impl ClientCodec {
|
|||||||
match self.escape_count {
|
match self.escape_count {
|
||||||
0 => self.escape_count = if *byte == b'\r' { 1 } else { 0 },
|
0 => self.escape_count = if *byte == b'\r' { 1 } else { 0 },
|
||||||
1 => self.escape_count = if *byte == b'\n' { 2 } 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!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
if self.escape_count == 3 {
|
if self.escape_count == 3 {
|
||||||
@@ -111,6 +119,7 @@ mod test {
|
|||||||
let mut buf: Vec<u8> = vec![];
|
let mut buf: Vec<u8> = vec![];
|
||||||
|
|
||||||
codec.encode(b"test\r\n", &mut buf);
|
codec.encode(b"test\r\n", &mut buf);
|
||||||
|
codec.encode(b"test\r\n\r\n", &mut buf);
|
||||||
codec.encode(b".\r\n", &mut buf);
|
codec.encode(b".\r\n", &mut buf);
|
||||||
codec.encode(b"\r\ntest", &mut buf);
|
codec.encode(b"\r\ntest", &mut buf);
|
||||||
codec.encode(b"te\r\n.\r\nst", &mut buf);
|
codec.encode(b"te\r\n.\r\nst", &mut buf);
|
||||||
@@ -121,7 +130,7 @@ mod test {
|
|||||||
codec.encode(b"test", &mut buf);
|
codec.encode(b"test", &mut buf);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
String::from_utf8(buf).unwrap(),
|
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"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user