diff options
author | Vincent Richard <[email protected]> | 2010-04-08 18:28:22 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2010-04-08 18:28:22 +0000 |
commit | 8f9fec339c395150fb52205d7337eb61348e2892 (patch) | |
tree | 218f7866813bdf50fb83d650e9ff865b09f11323 /src/parameterizedHeaderField.cpp | |
parent | Migrated config script for newer versions of SCons. (diff) | |
download | vmime-8f9fec339c395150fb52205d7337eb61348e2892.tar.gz vmime-8f9fec339c395150fb52205d7337eb61348e2892.zip |
Fixed parsing of non-significant whitespaces in field values.
Diffstat (limited to 'src/parameterizedHeaderField.cpp')
-rw-r--r-- | src/parameterizedHeaderField.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/parameterizedHeaderField.cpp b/src/parameterizedHeaderField.cpp index 090d5b40..464990e9 100644 --- a/src/parameterizedHeaderField.cpp +++ b/src/parameterizedHeaderField.cpp @@ -85,12 +85,32 @@ void parameterizedHeaderField::parse(const string& buffer, const string::size_ty const string::value_type* const pstart = buffer.data() + position; const string::value_type* p = pstart; - const string::size_type start = position; + // Skip non-significant whitespaces + string::size_type valueStart = position; - while (p < pend && *p != ';') ++p; + while (p < pend && parserHelpers::isSpace(*p)) + { + ++p; + ++valueStart; + } + + // Advance up to ';', if any + string::size_type valueLength = 0; + + while (p < pend && *p != ';') // FIXME: support ";" inside quoted or RFC-2047-encoded text + { + ++p; + ++valueLength; + } + + // Trim whitespaces at the end of the value + while (valueLength > 0 && parserHelpers::isSpace(buffer[valueStart + valueLength - 1])) + --valueLength; - getValue()->parse(buffer, start, position + (p - pstart)); + // Parse value + getValue()->parse(buffer, valueStart, valueStart + valueLength); + // Reset parameters removeAllParameters(); // If there is one or more parameters following... |