Fixed parsing header field value on next line.

This commit is contained in:
Vincent Richard 2013-03-24 10:02:23 +01:00
parent 005e7af6cd
commit 84415da8e1
3 changed files with 35 additions and 9 deletions

View File

@ -142,7 +142,7 @@ ref <headerField> headerField::parseNext
++pos;
const string::size_type contentsStart = pos;
string::size_type contentsEnd = 0;
string::size_type contentsEnd = end;
// Extract the field value
while (pos < end)

View File

@ -28,6 +28,7 @@ VMIME_TEST_SUITE_BEGIN(headerFieldTest)
VMIME_TEST_LIST_BEGIN
VMIME_TEST(testBadValueType)
VMIME_TEST(testValueOnNextLine)
VMIME_TEST_LIST_END
@ -49,4 +50,20 @@ VMIME_TEST_SUITE_BEGIN(headerFieldTest)
custom->setValue(vmime::text("field value text")));
}
void testValueOnNextLine()
{
vmime::parsingContext ctx;
const vmime::string buffer = "Field: \r\n\tfield data";
vmime::ref <vmime::headerField> hfield =
vmime::headerField::parseNext(ctx, buffer, 0, buffer.size());
vmime::ref <vmime::text> hvalue =
hfield->getValue().dynamicCast <vmime::text>();
VASSERT_EQ("Field name", "Field", hfield->getName());
VASSERT_EQ("Field value", "field data", hvalue->getWholeBuffer());
}
VMIME_TEST_SUITE_END

View File

@ -124,6 +124,23 @@ public:
void setValue(const string& value);
/** Parse a header field from a buffer.
*
* @param ctx parsing context
* @param buffer input buffer
* @param position current position in the input buffer
* @param end end position in the input buffer
* @param newPosition will receive the new position in the input buffer
* @return parsed header field, or NULL if no more header field can be parsed
* in the input buffer
*/
static ref <headerField> parseNext
(const parsingContext& ctx,
const string& buffer,
const string::size_type position,
const string::size_type end,
string::size_type* newPosition = NULL);
protected:
void parseImpl
@ -140,14 +157,6 @@ protected:
string::size_type* newLinePos = NULL) const;
static ref <headerField> parseNext
(const parsingContext& ctx,
const string& buffer,
const string::size_type position,
const string::size_type end,
string::size_type* newPosition = NULL);
string m_name;
ref <headerFieldValue> m_value;
};