--- kdelibs-4.1.2/kio/kio/kdirmodel.cpp~ 2008-09-25 13:57:45.000000000 +0200 +++ kdelibs-4.1.2/kio/kio/kdirmodel.cpp 2008-10-02 21:43:42.000000000 +0200 @@ -168,6 +168,10 @@ if (url == nodeUrl) return m_rootNode; + // Protocol mismatch? Don't even start comparing paths then. #171721 + if (url.protocol() != nodeUrl.protocol()) + return 0; + const QString pathStr = url.path(); KDirModelDirNode* dirNode = m_rootNode; --- kdelibs-4.1.2/kio/tests/kdirmodeltest.cpp~ 2008-09-25 13:57:45.000000000 +0200 +++ kdelibs-4.1.2/kio/tests/kdirmodeltest.cpp 2008-10-02 21:45:32.000000000 +0200 @@ -507,6 +507,26 @@ fillModel(true); } +void KDirModelTest::testZipFile() // # 171721 +{ + const QString path = KDESRCDIR; + KDirLister* dirLister = m_dirModel.dirLister(); + dirLister->openUrl(KUrl(path), KDirLister::NoFlags); + connect(dirLister, SIGNAL(completed()), this, SLOT(slotListingCompleted())); + enterLoop(); + disconnect(dirLister, SIGNAL(completed()), this, SLOT(slotListingCompleted())); + + KUrl zipUrl(path); + zipUrl.addPath("wronglocalsizes.zip"); // just a zip file lying here for other reasons + QVERIFY(QFile::exists(zipUrl.path())); + zipUrl.setProtocol("zip"); + QModelIndex index = m_dirModel.indexForUrl(zipUrl); + QVERIFY(!index.isValid()); // protocol mismatch, can't find it! + zipUrl.setProtocol("file"); + index = m_dirModel.indexForUrl(zipUrl); + QVERIFY(index.isValid()); +} + void KDirModelTest::testDeleteFiles() { const int oldTopLevelRowCount = m_dirModel.rowCount(); --- kdelibs-4.1.2/kio/tests/kdirmodeltest.h~ 2008-09-25 13:57:45.000000000 +0200 +++ kdelibs-4.1.2/kio/tests/kdirmodeltest.h 2008-10-02 21:46:24.000000000 +0200 @@ -43,6 +43,7 @@ void testRenameFile(); void testExpandToUrl_data(); void testExpandToUrl(); + void testZipFile(); void testDeleteFile(); void testDeleteFiles();