summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-05-14 21:24:10 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-05-14 21:24:10 +0900
commit286991e17d75507aff06622256097e3e8d00d470 (patch)
treebd2a9dd52f89e252e2bc5ac239f3f647d08cfca1
parent3026b18ecdb3dfd61fcb34d305d965e4944ac110 (diff)
Strip DQUOTE from cookie-value and updated doc.
-rw-r--r--src/cookie_helper.cc5
-rw-r--r--test/CookieHelperTest.cc7
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()