diff options
author | Vincent Richard <[email protected]> | 2011-03-09 18:03:31 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2011-03-09 18:03:31 +0000 |
commit | 98b4d91d013ba8d6ef70a9601d6b46bde9db872a (patch) | |
tree | 9837ff4dceb06a36eb550d64d69585c522ffeb9e /src/body.cpp | |
parent | Fixed possible read to invalid memory location (thanks to Alexander Konovalov). (diff) | |
download | vmime-98b4d91d013ba8d6ef70a9601d6b46bde9db872a.tar.gz vmime-98b4d91d013ba8d6ef70a9601d6b46bde9db872a.zip |
Fixed bug #3174903. Fixed word parsing when buffer does not end with NL. Fixed 'no encoding' when forced.
Diffstat (limited to 'src/body.cpp')
-rw-r--r-- | src/body.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/body.cpp b/src/body.cpp index 738d3e71..85968330 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -153,7 +153,10 @@ void body::parse(const string& buffer, const string::size_type position, if (pos != string::npos && pos < end) { - m_prologText = string(buffer.begin() + position, buffer.begin() + pos); + vmime::text text; + text.parse(buffer, position, pos); + + m_prologText = text.getWholeBuffer(); } for (int index = 0 ; !lastPart && (pos != string::npos) && (pos < end) ; ++index) @@ -246,7 +249,10 @@ void body::parse(const string& buffer, const string::size_type position, // Treat remaining text as epilog else if (partStart < end) { - m_epilogText = string(buffer.begin() + partStart, buffer.begin() + end); + vmime::text text; + text.parse(buffer, partStart, end); + + m_epilogText = text.getWholeBuffer(); } } // Treat the contents as 'simple' data @@ -333,7 +339,7 @@ void body::generate(utility::outputStream& os, const string::size_type maxLineLe if (!prologText.empty()) { - text prolog(word(prologText, getCharset())); + text prolog(prologText, vmime::charset("us-ascii")); prolog.encodeAndFold(os, maxLineLength, 0, NULL, text::FORCE_NO_ENCODING | text::NO_NEW_LINE_SEQUENCE); @@ -356,7 +362,7 @@ void body::generate(utility::outputStream& os, const string::size_type maxLineLe if (!epilogText.empty()) { - text epilog(word(epilogText, getCharset())); + text epilog(epilogText, vmime::charset("us-ascii")); epilog.encodeAndFold(os, maxLineLength, 0, NULL, text::FORCE_NO_ENCODING | text::NO_NEW_LINE_SEQUENCE); |