diff --git a/Net/include/Poco/Net/MailStream.h b/Net/include/Poco/Net/MailStream.h index e6500cd7c..869101b6d 100644 --- a/Net/include/Poco/Net/MailStream.h +++ b/Net/include/Poco/Net/MailStream.h @@ -65,6 +65,7 @@ private: { ST_DATA, ST_CR, + ST_LF, ST_CR_LF, ST_CR_LF_DOT, ST_CR_LF_DOT_DOT, diff --git a/Net/src/MailStream.cpp b/Net/src/MailStream.cpp index 278e591c7..6fff64650 100644 --- a/Net/src/MailStream.cpp +++ b/Net/src/MailStream.cpp @@ -132,7 +132,7 @@ int MailStreamBuf::writeToDevice(char c) if (_state == ST_CR) _state = ST_CR_LF; else - _state = ST_DATA; + _state = ST_LF; break; case '.': if (_state == ST_CR_LF) @@ -152,6 +152,11 @@ int MailStreamBuf::writeToDevice(char c) } _pOstr->put(c); } + else if (_state == ST_LF) + { + _buffer += "\r\n"; + _state = ST_CR_LF; + } else if (_state == ST_CR_LF_DOT) { // buffer contains one or more CR-LF pairs diff --git a/Net/testsuite/src/MailStreamTest.cpp b/Net/testsuite/src/MailStreamTest.cpp index 7b23abe46..fc668b901 100644 --- a/Net/testsuite/src/MailStreamTest.cpp +++ b/Net/testsuite/src/MailStreamTest.cpp @@ -72,6 +72,7 @@ void MailStreamTest::testMailOutputStream() "Subject: test\r\n" "\r\n" "This is a test.\r\n" + "\n.\n" "\rThis.is.\ngarbage\r.\r\n" ".This line starts with a period.\r\n" "\r\n" @@ -90,7 +91,8 @@ void MailStreamTest::testMailOutputStream() "Subject: test\r\n" "\r\n" "This is a test.\r\n" - "\rThis.is.\ngarbage\r.\r\n" + "\r\n..\r\n" + "\rThis.is.\r\ngarbage\r.\r\n" "..This line starts with a period.\r\n" "\r\n" "..and this one too\r\n"