From: Vadim Zeitlin Date: Wed, 21 Jan 2009 17:02:11 +0000 (+0000) Subject: fix wxURI::GetUser() for URIs without password; added unit test case for it (closes... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/62e3e6c2bc1b6371e6054091f22e99a8ef9166a2 fix wxURI::GetUser() for URIs without password; added unit test case for it (closes #10412) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/uri.cpp b/src/common/uri.cpp index fd5b69caaf..aac7aec3d1 100644 --- a/src/common/uri.cpp +++ b/src/common/uri.cpp @@ -184,22 +184,19 @@ void wxURI::AppendNextEscaped(wxString& s, const char *& p) // --------------------------------------------------------------------------- wxString wxURI::GetUser() const { - size_t dwPasswordPos = m_userinfo.find(':'); - - if (dwPasswordPos == wxString::npos) - dwPasswordPos = 0; - - return m_userinfo(0, dwPasswordPos); + // if there is no colon at all, find() returns npos and this method returns + // the entire string which is correct as it means that password was omitted + return m_userinfo(0, m_userinfo.find(':')); } wxString wxURI::GetPassword() const { - size_t dwPasswordPos = m_userinfo.find(':'); + size_t posColon = m_userinfo.find(':'); - if (dwPasswordPos == wxString::npos) + if ( posColon == wxString::npos ) return ""; - else - return m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1); + + return m_userinfo(posColon + 1, wxString::npos); } // combine all URI fields in a single string, applying funcDecode to each diff --git a/tests/uris/uris.cpp b/tests/uris/uris.cpp index e4920fcec6..f2cc591394 100644 --- a/tests/uris/uris.cpp +++ b/tests/uris/uris.cpp @@ -47,6 +47,7 @@ private: CPPUNIT_TEST( IPv6 ); CPPUNIT_TEST( Server ); CPPUNIT_TEST( Paths ); + CPPUNIT_TEST( UserAndPass ); CPPUNIT_TEST( NormalResolving ); CPPUNIT_TEST( ComplexResolving ); CPPUNIT_TEST( ReallyComplexResolving ); @@ -68,6 +69,7 @@ private: void IPv6(); void Server(); void Paths(); + void UserAndPass(); void NormalResolving(); void ComplexResolving(); void ReallyComplexResolving(); @@ -111,6 +113,9 @@ URITestCase::URITestCase() #define URI_ASSERT_PATH_EQUAL(uri, expected) \ URI_ASSERT_PART_EQUAL((uri), (expected), GetPath()) +#define URI_ASSERT_USER_EQUAL(uri, expected) \ + URI_ASSERT_PART_EQUAL((uri), (expected), GetUser()) + void URITestCase::IPv4() { URI_ASSERT_HOSTTYPE_EQUAL("http://user:password@192.168.1.100:5050/path", @@ -192,6 +197,13 @@ void URITestCase::Paths() "../joe", BuildURI()); } +void URITestCase::UserAndPass() +{ + URI_ASSERT_USER_EQUAL("http://user:pass@host/path/", "user"); + URI_ASSERT_USER_EQUAL("http://user@host/path/", "user"); + URI_ASSERT_USER_EQUAL("http://host/path/", ""); +} + #define URI_TEST_RESOLVE_IMPL(string, eq, strict) \ { \ wxURI uri(string); \