aboutsummaryrefslogtreecommitdiffstats
path: root/src/parameterizedHeaderField.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2010-04-08 18:28:22 +0000
committerVincent Richard <[email protected]>2010-04-08 18:28:22 +0000
commit8f9fec339c395150fb52205d7337eb61348e2892 (patch)
tree218f7866813bdf50fb83d650e9ff865b09f11323 /src/parameterizedHeaderField.cpp
parentMigrated config script for newer versions of SCons. (diff)
downloadvmime-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.cpp26
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...