diff --git a/autotests/urlutiltest.cpp b/autotests/urlutiltest.cpp --- a/autotests/urlutiltest.cpp +++ b/autotests/urlutiltest.cpp @@ -37,11 +37,18 @@ QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/data/documents/muh"), lUrl("/home/test")), lUrl("/home/test/data")); QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/data/documents/muh/"), lUrl("/home/test")), lUrl("/home/test/data")); QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/data/documents/muh"), lUrl("/home/test/")), lUrl("/home/test/data")); + // Same urls sould return QUrl() QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/data"), lUrl("/home/test/data/")), QUrl()); QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/data/"), lUrl("/home/test/data")), QUrl()); QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/test/"), lUrl("/home/test/")), QUrl()); + QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/"), lUrl("/")), QUrl()); + QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("file://"), lUrl("file://")), QUrl()); + // Not related urls should return QUrl() QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/aaa/"), lUrl("/home/bbb/")), QUrl()); QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/aaa/"), lUrl("/home/bbb/ccc")), QUrl()); + QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home"), lUrl("/test")), QUrl()); + // Child urls in reverse order should return QUrl() + QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home"), lUrl("/home/test")), QUrl()); // # is %23 in an URL, so this test could reveal path/URL confusion in the code: QCOMPARE(KIO::UrlUtil::firstChildUrl(lUrl("/home/a#/b#"), lUrl("/home/a#")), lUrl("/home/a#/b#")); } diff --git a/src/filewidgets/urlutil_p.h b/src/filewidgets/urlutil_p.h --- a/src/filewidgets/urlutil_p.h +++ b/src/filewidgets/urlutil_p.h @@ -70,7 +70,9 @@ // e.g. this would just be ok: // childPath = /home/a len=7 // parentPath = /home len=5 - Q_ASSERT(childPath.length() >= (parentPath.length() + 2)); + if (childPath.length() < (parentPath.length() + 2) ) { + return QUrl(); + } const int idx2 = childPath.indexOf(QLatin1Char('/'), parentPath.length() + 2); // parentPath = /home