fixed GH #2843: Poco::Net::MediaType::parse() does not split parameters

This commit is contained in:
Günter Obiltschnig 2020-01-22 11:56:11 +01:00
parent eb26a95682
commit f6dafb437e
2 changed files with 27 additions and 20 deletions

View File

@ -202,6 +202,7 @@ void MediaType::parse(const std::string& mediaType)
if (it != end) ++it; if (it != end) ++it;
while (it != end && *it != ';' && !Poco::Ascii::isSpace(*it)) _subType += *it++; while (it != end && *it != ';' && !Poco::Ascii::isSpace(*it)) _subType += *it++;
while (it != end && *it != ';') ++it; while (it != end && *it != ';') ++it;
if (it != end) ++it; // skip semicolon
MessageHeader::splitParameters(it, end, _parameters); MessageHeader::splitParameters(it, end, _parameters);
} }

View File

@ -37,15 +37,21 @@ void MediaTypeTest::testParse()
MediaType mt2("text/xml;charset=us-ascii"); MediaType mt2("text/xml;charset=us-ascii");
assertTrue (mt2.getType() == "text"); assertTrue (mt2.getType() == "text");
assertTrue (mt2.getSubType() == "xml"); assertTrue (mt2.getSubType() == "xml");
assertTrue (!mt2.parameters().empty()); assertTrue (mt2.parameters().size() == 1);
assertTrue (mt2.getParameter("charset") == "us-ascii"); assertTrue (mt2.getParameter("charset") == "us-ascii");
MediaType mt3("application/test; param1=value1; param2=\"value 2\""); MediaType mt3("application/test; param1=value1; param2=\"value 2\"");
assertTrue (mt3.getType() == "application"); assertTrue (mt3.getType() == "application");
assertTrue (mt3.getSubType() == "test"); assertTrue (mt3.getSubType() == "test");
assertTrue (!mt3.parameters().empty()); assertTrue (mt3.parameters().size() == 2);
assertTrue (mt3.getParameter("param1") == "value1"); assertTrue (mt3.getParameter("param1") == "value1");
assertTrue (mt3.getParameter("PARAM2") == "value 2"); assertTrue (mt3.getParameter("PARAM2") == "value 2");
MediaType mt4("multipart/mixed; boundary=\"MIME_boundary_01234567\"");
assertTrue (mt4.getType() == "multipart");
assertTrue (mt4.getSubType() == "mixed");
assertTrue (mt4.parameters().size() == 1);
assertTrue (mt4.getParameter("boundary") == "MIME_boundary_01234567");
} }