diff --git a/ChangeLog b/ChangeLog index 0c2c7c1d..552868fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,11 @@ VERSION 0.7.1cvs ================ +2005-06-13 Vincent Richard + + * word.cpp: fixed a bug in parsing, when the first character of word data + was encoded in QP (thanks to Wolf Jiang). + 2005-06-03 Vincent Richard * parameterizedHeaderField.{hpp|cpp}: fixed a memory leak in the diff --git a/src/word.cpp b/src/word.cpp index be7cfc9c..f55a66f3 100644 --- a/src/word.cpp +++ b/src/word.cpp @@ -93,7 +93,7 @@ word* word::parseNext(const string& buffer, const string::size_type position, startPos = pos; } // Start of an encoded word - else if (pos + 6 < end && // 6 = "=?(.+)?(.*)?=" + else if (pos + 8 < end && // 8 = "=?(.+)?(.+)?(.*)?=" buffer[pos] == '=' && buffer[pos + 1] == '?') { // Check whether there is some unencoded text before @@ -116,7 +116,23 @@ word* word::parseNext(const string& buffer, const string::size_type position, // ...else find the finish sequence '?=' and return an encoded word const string::size_type wordStart = pos; - pos += 4; + pos += 2; + + while (pos < end && buffer[pos] != '?') + ++pos; + + if (pos < end) + { + ++pos; // skip '?' between charset and encoding + + while (pos < end && buffer[pos] != '?') + ++pos; + + if (pos < end) + { + ++pos; // skip '?' between encoding and encoded data + } + } while (pos < end) {