fdo#33605: Handle http etc. URLs with no path but fragment

Change-Id: I8c47cc55e7ad53e514c0bd46130cbbe6a1bb0357
This commit is contained in:
Stephan Bergmann 2013-07-26 17:41:08 +02:00
parent 2be3dcd9cc
commit 44ddacb232
2 changed files with 24 additions and 2 deletions

View File

@ -240,6 +240,27 @@ namespace tools_urlobj
}
}
void urlobjTest_emptyPath() {
{
INetURLObject url(OUString("http://example.com"));
CPPUNIT_ASSERT_EQUAL(INET_PROT_HTTP, url.GetProtocol());
CPPUNIT_ASSERT_EQUAL(OUString("example.com"), url.GetHost());
CPPUNIT_ASSERT_EQUAL(OUString("/"), url.GetURLPath());
}
{
// This is an invalid http URL per RFC 2616:
INetURLObject url(OUString("http://example.com?query"));
CPPUNIT_ASSERT(url.HasError());
}
{
INetURLObject url(OUString("http://example.com#fragment"));
CPPUNIT_ASSERT_EQUAL(INET_PROT_HTTP, url.GetProtocol());
CPPUNIT_ASSERT_EQUAL(OUString("example.com"), url.GetHost());
CPPUNIT_ASSERT_EQUAL(OUString("/"), url.GetURLPath());
CPPUNIT_ASSERT_EQUAL(OUString("fragment"), url.GetMark());
}
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
@ -252,6 +273,7 @@ namespace tools_urlobj
CPPUNIT_TEST( urlobjTest_005 );
CPPUNIT_TEST( urlobjTest_006 );
CPPUNIT_TEST( urlobjCmisTest );
CPPUNIT_TEST( urlobjTest_emptyPath );
CPPUNIT_TEST_SUITE_END( );
}; // class createPool

View File

@ -2933,7 +2933,7 @@ bool INetURLObject::parsePath(INetProtocol eScheme,
case INET_PROT_FTP:
case INET_PROT_IMAP:
if (pPos < pEnd && *pPos != '/')
if (pPos < pEnd && *pPos != '/' && *pPos != nFragmentDelimiter)
return false;
while (pPos < pEnd && *pPos != nFragmentDelimiter)
{
@ -2953,7 +2953,7 @@ bool INetURLObject::parsePath(INetProtocol eScheme,
case INET_PROT_HTTPS:
case INET_PROT_SMB:
case INET_PROT_CMIS:
if (pPos < pEnd && *pPos != '/')
if (pPos < pEnd && *pPos != '/' && *pPos != nFragmentDelimiter)
return false;
while (pPos < pEnd && *pPos != nQueryDelimiter
&& *pPos != nFragmentDelimiter)