tdf#130501: Fix off-by-one error in URIHelper::resolveIdnaHost
Change-Id: Ibc231308d0fc93085933ae7d80dc8c4b2699fe02 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88204 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
parent
f0decd9c93
commit
4c0394461a
2 changed files with 19 additions and 4 deletions
|
@ -458,6 +458,19 @@ void Test::testResolveIdnaHost() {
|
|||
CPPUNIT_ASSERT_EQUAL(
|
||||
OUString("foo://xn--mnchen-3ya.de"),
|
||||
URIHelper::resolveIdnaHost(u"foo://Mu\u0308nchen.de"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
OUString("foo://example.xn--m-eha"), URIHelper::resolveIdnaHost(u"foo://example.mü"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
OUString("foo://example.xn--m-eha:0"), URIHelper::resolveIdnaHost(u"foo://example.mü:0"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
OUString("foo://xn--e1afmkfd.xn--p1ai"), URIHelper::resolveIdnaHost(u"foo://пример.рф"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
OUString("foo://xn--e1afmkfd.xn--p1ai:0"),
|
||||
URIHelper::resolveIdnaHost(u"foo://пример.рф:0"));
|
||||
}
|
||||
|
||||
css::uno::Reference< css::uno::XComponentContext > Test::m_context;
|
||||
|
|
|
@ -742,12 +742,14 @@ OUString URIHelper::resolveIdnaHost(OUString const & url) {
|
|||
if (auth.isEmpty())
|
||||
return url;
|
||||
sal_Int32 hostStart = auth.indexOf('@') + 1;
|
||||
sal_Int32 hostEnd = auth.getLength() - 1;
|
||||
while (hostEnd > hostStart && rtl::isAsciiDigit(auth[hostEnd])) {
|
||||
sal_Int32 hostEnd = auth.getLength();
|
||||
while (hostEnd > hostStart && rtl::isAsciiDigit(auth[hostEnd - 1])) {
|
||||
--hostEnd;
|
||||
}
|
||||
if (!(hostEnd > hostStart && auth[hostEnd] == ':')) {
|
||||
hostEnd = auth.getLength() - 1;
|
||||
if (hostEnd > hostStart && auth[hostEnd - 1] == ':') {
|
||||
--hostEnd;
|
||||
} else {
|
||||
hostEnd = auth.getLength();
|
||||
}
|
||||
auto asciiOnly = true;
|
||||
for (auto i = hostStart; i != hostEnd; ++i) {
|
||||
|
|
Loading…
Reference in a new issue