diff --git a/ChangeLog b/ChangeLog index 2020ef11..2c963942 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-10-26 Tatsuhiro Tsujikawa + + Use std::numeric_limits instead of checking of + sizeof(time_t). + * src/NsCookieParser.cc + * src/Sqlite3CookieParser.cc + * src/cookie_helper.cc + * test/CookieHelperTest.cc + * test/CookieStorageTest.cc + * test/NsCookieParserTest.cc + 2010-10-26 Tatsuhiro Tsujikawa Fixed improper use of vsnprintf diff --git a/src/NsCookieParser.cc b/src/NsCookieParser.cc index 1a4f13ed..9d3c3c1b 100644 --- a/src/NsCookieParser.cc +++ b/src/NsCookieParser.cc @@ -35,6 +35,7 @@ #include "NsCookieParser.h" #include +#include #include "util.h" #include "A2STR.h" @@ -70,12 +71,15 @@ bool parseNsCookie if(!util::parseLLIntNoThrow(expiryTime, vs[4])) { return false; } - if(sizeof(time_t) == 4 && expiryTime > INT32_MAX) { - expiryTime = INT32_MAX; + if(std::numeric_limits::max() < expiryTime) { + expiryTime = std::numeric_limits::max(); + } else if(std::numeric_limits::min() > expiryTime) { + expiryTime = std::numeric_limits::min(); } cookie.setName(vs[5]); cookie.setValue(vs.size() >= 7? vs[6]:A2STR::NIL); - cookie.setExpiryTime(expiryTime == 0?INT32_MAX:expiryTime); + cookie.setExpiryTime(expiryTime == 0? + std::numeric_limits::max():expiryTime); // aria2 treats expiryTime == 0 means session cookie. cookie.setPersistent(expiryTime != 0); cookie.setDomain(cookieDomain); diff --git a/src/Sqlite3CookieParser.cc b/src/Sqlite3CookieParser.cc index 088ff99a..0a6ae9f9 100644 --- a/src/Sqlite3CookieParser.cc +++ b/src/Sqlite3CookieParser.cc @@ -35,6 +35,7 @@ #include "Sqlite3CookieParser.h" #include +#include #include "DlAbortEx.h" #include "util.h" @@ -83,8 +84,10 @@ static bool parseTime(int64_t& time, const std::string& s) if(!util::parseLLIntNoThrow(time, s)) { return false; } - if(sizeof(time_t) == 4 && time > INT32_MAX) { - time = INT32_MAX; + if(std::numeric_limits::max() < time) { + time = std::numeric_limits::max(); + } else if(std::numeric_limits::min() > time) { + time = std::numeric_limits::min(); } return true; } diff --git a/src/cookie_helper.cc b/src/cookie_helper.cc index d1cdbc73..69b2366f 100644 --- a/src/cookie_helper.cc +++ b/src/cookie_helper.cc @@ -36,6 +36,7 @@ #include #include +#include #include "util.h" #include "array_fun.h" @@ -263,8 +264,8 @@ bool parse } else { int64_t n = creationTime; n += delta; - if(n < 0 || (sizeof(time_t) < 8 && n > INT32_MAX)) { - maxAge = INT32_MAX; + if(n < 0 || std::numeric_limits::max() < n) { + maxAge = std::numeric_limits::max(); } else { maxAge = n; } @@ -302,7 +303,7 @@ bool parse } else if(foundExpires) { persistent = true; } else { - expiryTime = INT32_MAX; + expiryTime = std::numeric_limits::max(); persistent = false; } diff --git a/test/CookieHelperTest.cc b/test/CookieHelperTest.cc index cca16382..35d81a1c 100644 --- a/test/CookieHelperTest.cc +++ b/test/CookieHelperTest.cc @@ -1,5 +1,7 @@ #include "cookie_helper.h" +#include + #include #include "Exception.h" @@ -123,7 +125,7 @@ void CookieHelperTest::testParse() std::string str = "id=; Max-Age=9223372036854775807;"; Cookie c; CPPUNIT_ASSERT(cookie::parse(c, str, "localhost", "/", creationDate)); - CPPUNIT_ASSERT_EQUAL((time_t)INT32_MAX, c.getExpiryTime()); + CPPUNIT_ASSERT_EQUAL(std::numeric_limits::max(), c.getExpiryTime()); CPPUNIT_ASSERT(c.getPersistent()); } { diff --git a/test/CookieStorageTest.cc b/test/CookieStorageTest.cc index 58c1c73e..f8ec0b0c 100644 --- a/test/CookieStorageTest.cc +++ b/test/CookieStorageTest.cc @@ -2,6 +2,7 @@ #include #include +#include #include @@ -269,7 +270,7 @@ void CookieStorageTest::testLoad() Cookie c = cookies[0]; CPPUNIT_ASSERT_EQUAL(std::string("passwd"), c.getName()); CPPUNIT_ASSERT_EQUAL(std::string("secret"), c.getValue()); - CPPUNIT_ASSERT_EQUAL((time_t)INT32_MAX, c.getExpiryTime()); + CPPUNIT_ASSERT_EQUAL(std::numeric_limits::max(), c.getExpiryTime()); CPPUNIT_ASSERT(!c.getPersistent()); CPPUNIT_ASSERT_EQUAL(std::string("/cgi-bin"), c.getPath()); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), c.getDomain()); diff --git a/test/NsCookieParserTest.cc b/test/NsCookieParserTest.cc index fd5fbd31..1e431d2b 100644 --- a/test/NsCookieParserTest.cc +++ b/test/NsCookieParserTest.cc @@ -1,6 +1,7 @@ #include "NsCookieParser.h" #include +#include #include @@ -58,7 +59,7 @@ void NsCookieParserTest::testParse() c = cookies[2]; CPPUNIT_ASSERT_EQUAL(std::string("passwd"), c.getName()); CPPUNIT_ASSERT_EQUAL(std::string("secret"), c.getValue()); - CPPUNIT_ASSERT_EQUAL((time_t)INT32_MAX, c.getExpiryTime()); + CPPUNIT_ASSERT_EQUAL(std::numeric_limits::max(), c.getExpiryTime()); CPPUNIT_ASSERT(!c.getPersistent()); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), c.getDomain()); CPPUNIT_ASSERT(c.getHostOnly());