Check scheme part in redirected URI more strictly.

The previous implementation mistakenly sees '/abspath?uri=http://foo'
as an absolute URI because it contains '://', but actually it is not.
This change checks scheme part is constructed in the allowed character
set described in RFC 3986 Section 3.1.
This commit is contained in:
Tatsuhiro Tsujikawa
2012-02-15 01:40:12 +09:00
parent 9e302b86df
commit b7dbcea58b
3 changed files with 42 additions and 16 deletions

View File

@@ -142,6 +142,12 @@ void RequestTest::testRedirectUri()
CPPUNIT_ASSERT(req.redirectUri("//host/to/file"));
CPPUNIT_ASSERT_EQUAL(std::string("http://host/to/file"), req.getCurrentUri());
CPPUNIT_ASSERT_EQUAL(5, req.getRedirectCount());
// http:// in query part
CPPUNIT_ASSERT(req.redirectUri("/abspath?uri=http://foo"));
CPPUNIT_ASSERT_EQUAL(std::string("http://host/abspath?uri=http://foo"),
req.getCurrentUri());
CPPUNIT_ASSERT_EQUAL(6, req.getRedirectCount());
}
void RequestTest::testRedirectUri2()