summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/qa/cppunit/test_urlobj.cxx22
-rw-r--r--tools/source/fsys/urlobj.cxx4
2 files changed, 24 insertions, 2 deletions
diff --git a/tools/qa/cppunit/test_urlobj.cxx b/tools/qa/cppunit/test_urlobj.cxx
index 38120aa4c722..07714eed4b5d 100644
--- a/tools/qa/cppunit/test_urlobj.cxx
+++ b/tools/qa/cppunit/test_urlobj.cxx
@@ -268,6 +268,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.
@@ -280,6 +301,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
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index f6e9db46b92c..eecc4b4ea0e5 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -2942,7 +2942,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)
{
@@ -2962,7 +2962,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)