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:
Stephan Bergmann
2024-12-07 22:22:23 +01:00
parent 05eb50c396
commit 8075798b22
2 changed files with 58 additions and 3 deletions
+44
View File
@@ -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
+14 -3
View File
@@ -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;
}