Fix check for further exotic protocols
...that were added in 59891cd398 "look at
'embedded' protocols for protocols that support them"
Change-Id: I42836d6fd27cd99e39ab07e626053f002a2651f5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178047
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
This commit is contained in:
@@ -354,6 +354,49 @@ namespace tools_urlobj
|
||||
}
|
||||
}
|
||||
|
||||
void testIsExoticProtocol() {
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.pkg://slot%3A0");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::VndSunStarPkg, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.pkg://vnd.sun.star.pkg%3A%2F%2Fslot%253A0");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::VndSunStarPkg, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.pkg://http%3A%2F%2Fexample.net");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::VndSunStarPkg, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(!url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.zip://slot%3A0");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::Generic, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.zip://slot%3A0/foo");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::Generic, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.zip://slot%3A0?foo");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::Generic, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.zip://slot%3A0#foo");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::Generic, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(url.IsExoticProtocol());
|
||||
}
|
||||
{
|
||||
INetURLObject url(u"vnd.sun.star.zip://http%3A%2F%2Fexample.net");
|
||||
CPPUNIT_ASSERT_EQUAL(INetProtocol::Generic, url.GetProtocol());
|
||||
CPPUNIT_ASSERT(!url.IsExoticProtocol());
|
||||
}
|
||||
}
|
||||
|
||||
// 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.
|
||||
@@ -371,6 +414,7 @@ namespace tools_urlobj
|
||||
CPPUNIT_TEST( testChangeScheme );
|
||||
CPPUNIT_TEST( testTd146382 );
|
||||
CPPUNIT_TEST( testParseSmart );
|
||||
CPPUNIT_TEST( testIsExoticProtocol );
|
||||
CPPUNIT_TEST_SUITE_END( );
|
||||
}; // class createPool
|
||||
|
||||
|
||||
@@ -4898,10 +4898,21 @@ bool INetURLObject::IsExoticProtocol() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (isSchemeEqualTo(u"vnd.sun.star.pkg") || isSchemeEqualTo(u"vnd.sun.star.zip"))
|
||||
if (m_eScheme == INetProtocol::VndSunStarPkg) {
|
||||
return INetURLObject(GetHost(INetURLObject::DecodeMechanism::WithCharset))
|
||||
.IsExoticProtocol();
|
||||
}
|
||||
if (isSchemeEqualTo(u"vnd.sun.star.zip"))
|
||||
{
|
||||
OUString sPayloadURL = GetURLPath(INetURLObject::DecodeMechanism::WithCharset);
|
||||
return sPayloadURL.startsWith(u"//") && INetURLObject(sPayloadURL.subView(2)).IsExoticProtocol();
|
||||
OUString sPayloadURL = GetURLPath(INetURLObject::DecodeMechanism::NONE);
|
||||
if (!sPayloadURL.startsWith(u"//")) {
|
||||
return false;
|
||||
}
|
||||
auto const find = [&sPayloadURL](auto c) {
|
||||
auto const n = sPayloadURL.indexOf(c, 2);
|
||||
return n == -1 ? sPayloadURL.getLength() : n;
|
||||
};
|
||||
return INetURLObject(decode(sPayloadURL.subView(2, std::min(find('/'), find('?')) - 2), INetURLObject::DecodeMechanism::WithCharset)).IsExoticProtocol();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user