diff --git a/autotests/kurifiltertest.cpp b/autotests/kurifiltertest.cpp --- a/autotests/kurifiltertest.cpp +++ b/autotests/kurifiltertest.cpp @@ -257,9 +257,10 @@ if (QFile::exists(QDir::homePath() + QLatin1String("/.bashrc"))) { addRow("~/.bashrc", QDir::homePath() + QStringLiteral("/.bashrc"), KUriFilterData::LocalFile, QStringList(QStringLiteral("kshorturifilter"))); } - addRow("~", QDir::homePath().toLocal8Bit(), KUriFilterData::LocalDir, QStringList(QStringLiteral("kshorturifilter")), QStringLiteral("/tmp")); + addRow("~", QDir::homePath(), KUriFilterData::LocalDir, QStringList(QStringLiteral("kshorturifilter")), QStringLiteral("/tmp")); addRow("~bin", nullptr, KUriFilterData::LocalDir, QStringList(QStringLiteral("kshorturifilter"))); addRow("~does_not_exist", nullptr, KUriFilterData::Error, QStringList(QStringLiteral("kshorturifilter"))); + addRow("~/does_not_exist", QDir::homePath() + "/does_not_exist", KUriFilterData::LocalFile, QStringList(QStringLiteral("kshorturifilter"))); // Absolute Path tests for kshorturifilter const QStringList kshorturifilter(QStringLiteral("kshorturifilter")); @@ -376,9 +377,9 @@ addRow("cp", QStringLiteral("cp"), KUriFilterData::Executable, minicliFilters); addRow("kbuildsycoca5", QStringLiteral("kbuildsycoca5"), KUriFilterData::Executable, minicliFilters); addRow("KDE", QStringLiteral("KDE"), NO_FILTERING, minicliFilters); - addRow("I/dont/exist", QStringLiteral("I/dont/exist"), NO_FILTERING, minicliFilters); //krazy:exclude=spelling - addRow("/I/dont/exist", nullptr, KUriFilterData::Error, minicliFilters); //krazy:exclude=spelling - addRow("/I/dont/exist#a", nullptr, KUriFilterData::Error, minicliFilters); //krazy:exclude=spelling + addRow("does/not/exist", QStringLiteral("does/not/exist"), NO_FILTERING, minicliFilters); + addRow("/does/not/exist", QStringLiteral("/does/not/exist"), KUriFilterData::LocalFile, minicliFilters); + addRow("/does/not/exist#a", QStringLiteral("/does/not/exist#a"), KUriFilterData::LocalFile, minicliFilters); addRow("kbuildsycoca5 --help", QStringLiteral("kbuildsycoca5 --help"), KUriFilterData::Executable, minicliFilters); // the args are in argsAndOptions() addRow("/bin/sh", QStringLiteral("/bin/sh"), KUriFilterData::Executable, minicliFilters); addRow("/bin/sh -q -option arg1", QStringLiteral("/bin/sh -q -option arg1"), KUriFilterData::Executable, minicliFilters); // the args are in argsAndOptions() @@ -402,7 +403,7 @@ qputenv("SOMEVAR", "/somevar"); qputenv("ETC", "/etc"); - addRow("$SOMEVAR/kdelibs/kio", nullptr, KUriFilterData::Error); // note: this dir doesn't exist... + addRow("$SOMEVAR/kdelibs/kio", "/somevar/kdelibs/kio", KUriFilterData::LocalFile); // note: this dir doesn't exist... addRow("$ETC/passwd", QStringLiteral("/etc/passwd"), KUriFilterData::LocalFile); QString qtdocPath = qtdir + QStringLiteral("/doc/html/functions.html"); if (QFile::exists(qtdocPath)) { @@ -432,7 +433,7 @@ QDir().mkpath(datahome + QStringLiteral("/Dir[Bracket")); addRow("$DATAHOME/Dir[Bracket", datahome + QStringLiteral("/Dir[Bracket"), KUriFilterData::LocalDir); - addRow("$HOME/$KDEDIR/kdebase/kcontrol/ebrowsing", nullptr, KUriFilterData::Error); + addRow("$HOME/$KDEDIR/kdebase/kcontrol/ebrowsing", "", KUriFilterData::LocalFile); addRow("$1/$2/$3", QStringLiteral("https://www.google.com/search?q=%241%2F%242%2F%243&ie=UTF-8"), KUriFilterData::NetProtocol); // can be used as bogus or valid test. Currently triggers default search, i.e. google addRow("$$$$", QStringLiteral("https://www.google.com/search?q=%24%24%24%24&ie=UTF-8"), KUriFilterData::NetProtocol); // worst case scenarios. diff --git a/src/urifilters/shorturi/kshorturifilter.cpp b/src/urifilters/shorturi/kshorturifilter.cpp --- a/src/urifilters/shorturi/kshorturifilter.cpp +++ b/src/urifilters/shorturi/kshorturifilter.cpp @@ -509,23 +509,16 @@ } // If we previously determined that the URL might be a file, - // and if it doesn't exist, then error + // and if it doesn't exist... we'll pretend it exists. + // This allows to use it for completion purposes. + // (If you change this logic again, look at the commit that was testing + // for KUrlAuthorized::authorizeUrlAction("open")) if( isLocalFullPath && !exists ) { QUrl u = QUrl::fromLocalFile(path); u.setFragment(ref); - - if (!KUrlAuthorized::authorizeUrlAction( QStringLiteral("open"), QUrl(), u)) - { - // No authorization, we pretend it exists and will get - // an access denied error later on. - setFilteredUri( data, u ); - setUriType( data, KUriFilterData::LocalFile ); - return true; - } - qCDebug(category) << "fileNotFound -> ERROR"; - setErrorMsg( data, i18n( "The file or folder %1 does not exist.", data.uri().toDisplayString() ) ); - setUriType( data, KUriFilterData::Error ); + setFilteredUri(data, u); + setUriType(data, KUriFilterData::LocalFile); return true; }