fdo#33605: Handle http etc. URLs with no path but fragment
Change-Id: I8c47cc55e7ad53e514c0bd46130cbbe6a1bb0357
This commit is contained in:
@@ -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
|
// Change the following lines only, if you add, remove or rename
|
||||||
// member functions of the current class,
|
// member functions of the current class,
|
||||||
// because these macros are need by auto register mechanism.
|
// because these macros are need by auto register mechanism.
|
||||||
@@ -252,6 +273,7 @@ namespace tools_urlobj
|
|||||||
CPPUNIT_TEST( urlobjTest_005 );
|
CPPUNIT_TEST( urlobjTest_005 );
|
||||||
CPPUNIT_TEST( urlobjTest_006 );
|
CPPUNIT_TEST( urlobjTest_006 );
|
||||||
CPPUNIT_TEST( urlobjCmisTest );
|
CPPUNIT_TEST( urlobjCmisTest );
|
||||||
|
CPPUNIT_TEST( urlobjTest_emptyPath );
|
||||||
CPPUNIT_TEST_SUITE_END( );
|
CPPUNIT_TEST_SUITE_END( );
|
||||||
}; // class createPool
|
}; // class createPool
|
||||||
|
|
||||||
|
@@ -2933,7 +2933,7 @@ bool INetURLObject::parsePath(INetProtocol eScheme,
|
|||||||
|
|
||||||
case INET_PROT_FTP:
|
case INET_PROT_FTP:
|
||||||
case INET_PROT_IMAP:
|
case INET_PROT_IMAP:
|
||||||
if (pPos < pEnd && *pPos != '/')
|
if (pPos < pEnd && *pPos != '/' && *pPos != nFragmentDelimiter)
|
||||||
return false;
|
return false;
|
||||||
while (pPos < pEnd && *pPos != nFragmentDelimiter)
|
while (pPos < pEnd && *pPos != nFragmentDelimiter)
|
||||||
{
|
{
|
||||||
@@ -2953,7 +2953,7 @@ bool INetURLObject::parsePath(INetProtocol eScheme,
|
|||||||
case INET_PROT_HTTPS:
|
case INET_PROT_HTTPS:
|
||||||
case INET_PROT_SMB:
|
case INET_PROT_SMB:
|
||||||
case INET_PROT_CMIS:
|
case INET_PROT_CMIS:
|
||||||
if (pPos < pEnd && *pPos != '/')
|
if (pPos < pEnd && *pPos != '/' && *pPos != nFragmentDelimiter)
|
||||||
return false;
|
return false;
|
||||||
while (pPos < pEnd && *pPos != nQueryDelimiter
|
while (pPos < pEnd && *pPos != nQueryDelimiter
|
||||||
&& *pPos != nFragmentDelimiter)
|
&& *pPos != nFragmentDelimiter)
|
||||||
|
Reference in New Issue
Block a user