diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-05-14 21:24:10 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-05-14 21:24:10 +0900 |
| commit | 286991e17d75507aff06622256097e3e8d00d470 (patch) | |
| tree | bd2a9dd52f89e252e2bc5ac239f3f647d08cfca1 | |
| parent | 3026b18ecdb3dfd61fcb34d305d965e4944ac110 (diff) | |
Strip DQUOTE from cookie-value and updated doc.
| -rw-r--r-- | src/cookie_helper.cc | 5 | ||||
| -rw-r--r-- | test/CookieHelperTest.cc | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cookie_helper.cc b/src/cookie_helper.cc index 26de1c9c..c3cef6da 100644 --- a/src/cookie_helper.cc +++ b/src/cookie_helper.cc @@ -67,6 +67,8 @@ std::string::const_iterator getNextDigit bool parseDate(time_t& time, const std::string& cookieDate) { + // Following algorithm is described in + // http://tools.ietf.org/html/rfc6265#section-5.1.1 std::vector<std::string> dateTokens; for(std::string::const_iterator i = cookieDate.begin(), eoi = cookieDate.end(); i != eoi;) { @@ -198,6 +200,8 @@ bool parse const std::string& defaultPath, time_t creationTime) { + // This implementation is based on the algorithm listed in + // http://tools.ietf.org/html/rfc6265 std::string::const_iterator nvEnd = cookieStr.begin(); std::string::const_iterator end = cookieStr.end(); for(; nvEnd != end && *nvEnd != ';'; ++nvEnd); @@ -211,6 +215,7 @@ bool parse return false; } std::string cookieValue = util::stripIter(eq+1, nvEnd); + cookieValue = util::strip(cookieValue, "\""); time_t expiryTime = 0; bool foundExpires = false; bool persistent = false; diff --git a/test/CookieHelperTest.cc b/test/CookieHelperTest.cc index 35d81a1c..dd39f502 100644 --- a/test/CookieHelperTest.cc +++ b/test/CookieHelperTest.cc @@ -213,6 +213,13 @@ void CookieHelperTest::testParse() CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), c.getDomain()); CPPUNIT_ASSERT(c.getHostOnly()); } + { + // DQUOTE around cookie-value + std::string str = "id=\"foo\";"; + Cookie c; + CPPUNIT_ASSERT(cookie::parse(c, str, "localhost", "/", creationDate)); + CPPUNIT_ASSERT_EQUAL(std::string("foo"), c.getValue()); + } } void CookieHelperTest::testReverseDomainLevel() |
