2010-01-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Replaced isNumberAndDotsNotation() with isNumericHost().
	isNumericHost() can handle IPv6 address.
	* src/Cookie.cc
	* src/CookieStorage.cc
	* src/util.cc
	* src/util.h
	* test/CookieTest.cc
	* test/UtilTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-01-28 14:25:16 +00:00
parent 994d58a4a4
commit eb4116ae57
7 changed files with 35 additions and 8 deletions

View File

@ -1,3 +1,14 @@
2010-01-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Replaced isNumberAndDotsNotation() with isNumericHost().
isNumericHost() can handle IPv6 address.
* src/Cookie.cc
* src/CookieStorage.cc
* src/util.cc
* src/util.h
* test/CookieTest.cc
* test/UtilTest.cc
2010-01-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> 2010-01-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Included A2STR.h Included A2STR.h

View File

@ -56,7 +56,7 @@ static std::string prependDotIfNotExists(const std::string& domain)
std::string Cookie::normalizeDomain(const std::string& domain) std::string Cookie::normalizeDomain(const std::string& domain)
{ {
if(domain.empty() || util::isNumbersAndDotsNotation(domain)) { if(domain.empty() || util::isNumericHost(domain)) {
return domain; return domain;
} }
std::string md = prependDotIfNotExists(domain); std::string md = prependDotIfNotExists(domain);

View File

@ -245,7 +245,7 @@ std::deque<Cookie> CookieStorage::criteriaFind(const std::string& requestHost,
time_t date, bool secure) time_t date, bool secure)
{ {
std::deque<Cookie> res; std::deque<Cookie> res;
bool numericHost = util::isNumbersAndDotsNotation(requestHost); bool numericHost = util::isNumericHost(requestHost);
searchCookieByDomainSuffix searchCookieByDomainSuffix
((!numericHost && requestHost.find(A2STR::DOT_C) == std::string::npos)? ((!numericHost && requestHost.find(A2STR::DOT_C) == std::string::npos)?
requestHost+".local":requestHost, requestHost+".local":requestHost,

View File

@ -664,13 +664,18 @@ std::string toLower(const std::string& src) {
return temp; return temp;
} }
bool isNumbersAndDotsNotation(const std::string& name) { bool isNumericHost(const std::string& name)
struct sockaddr_in sockaddr; {
if(inet_aton(name.c_str(), &sockaddr.sin_addr)) { struct addrinfo hints;
return true; struct addrinfo* res;
} else { memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_NUMERICHOST;
if(getaddrinfo(name.c_str(), 0, &hints, &res)) {
return false; return false;
} }
freeaddrinfo(res);
return true;
} }
void setGlobalSignalHandler(int sig, void (*handler)(int), int flags) { void setGlobalSignalHandler(int sig, void (*handler)(int), int flags) {

View File

@ -222,7 +222,7 @@ std::string toUpper(const std::string& src);
std::string toLower(const std::string& src); std::string toLower(const std::string& src);
bool isNumbersAndDotsNotation(const std::string& name); bool isNumericHost(const std::string& name);
void setGlobalSignalHandler(int signal, void (*handler)(int), int flags); void setGlobalSignalHandler(int signal, void (*handler)(int), int flags);

View File

@ -178,6 +178,8 @@ void CookieTest::testNormalizeDomain()
CPPUNIT_ASSERT_EQUAL(std::string("..local"), dot.getDomain()); CPPUNIT_ASSERT_EQUAL(std::string("..local"), dot.getDomain());
Cookie ip("k", "v", "/", "192.168.1.1", false); Cookie ip("k", "v", "/", "192.168.1.1", false);
CPPUNIT_ASSERT_EQUAL(std::string("192.168.1.1"), ip.getDomain()); CPPUNIT_ASSERT_EQUAL(std::string("192.168.1.1"), ip.getDomain());
Cookie ipv6("k", "v", "/", "::1", false);
CPPUNIT_ASSERT_EQUAL(std::string("::1"), ipv6.getDomain());
} }
void CookieTest::testToNsCookieFormat() void CookieTest::testToNsCookieFormat()

View File

@ -60,6 +60,7 @@ class UtilTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testParsePrioritizePieceRange); CPPUNIT_TEST(testParsePrioritizePieceRange);
CPPUNIT_TEST(testApplyDir); CPPUNIT_TEST(testApplyDir);
CPPUNIT_TEST(testFixTaintedBasename); CPPUNIT_TEST(testFixTaintedBasename);
CPPUNIT_TEST(testIsNumericHost);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
private: private:
@ -108,6 +109,7 @@ public:
void testParsePrioritizePieceRange(); void testParsePrioritizePieceRange();
void testApplyDir(); void testApplyDir();
void testFixTaintedBasename(); void testFixTaintedBasename();
void testIsNumericHost();
}; };
@ -919,4 +921,11 @@ void UtilTest::testFixTaintedBasename()
CPPUNIT_ASSERT_EQUAL(std::string("a__b"), util::fixTaintedBasename("a\\/b")); CPPUNIT_ASSERT_EQUAL(std::string("a__b"), util::fixTaintedBasename("a\\/b"));
} }
void UtilTest::testIsNumericHost()
{
CPPUNIT_ASSERT(util::isNumericHost("192.168.0.1"));
CPPUNIT_ASSERT(!util::isNumericHost("aria2.sf.net"));
CPPUNIT_ASSERT(util::isNumericHost("::1"));
}
} // namespace aria2 } // namespace aria2