aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/word.cpp20
1 files changed, 18 insertions, 2 deletions
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)
{