浏览代码

Strip DQUOTE from cookie-value and updated doc.

Tatsuhiro Tsujikawa 14 年之前
父节点
当前提交
286991e17d
共有 2 个文件被更改,包括 12 次插入0 次删除
  1. 5 0
      src/cookie_helper.cc
  2. 7 0
      test/CookieHelperTest.cc

+ 5 - 0
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;

+ 7 - 0
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()