From kde-core-devel Sat Oct 18 00:39:27 2014 From: Kevin Kofler Date: Sat, 18 Oct 2014 00:39:27 +0000 To: kde-core-devel Subject: Re: QUrl from a string (porting KUrl constructor or KCmdLineArgs::url) Message-Id: X-MARC-Message: https://marc.info/?l=kde-core-devel&m=141359279227385 PS: I wrote: > So, Lukáš Tinkl answered me on #fedora-kde IRC. For posterity: > * Qt 5.4 introduces a new overload: > http://doc-snapshot.qt-project.org/qt5-5.4/qurl.html#fromUserInput-2 > with a third parameter that solves this issue. > * This is how Okular solves the problem without hard-depending on Qt 5.4: > http://quickgit.kde.org/?p=okular.git&a=commit&h=d98b4d920037422fe052ffa2633349d41fdbe02e Sorry for yet another self-reply, but I'll point out that Okular currently uses the two-argument form, which according to the documentation is enough when only existing files need to be supported, but I definitely recommend passing the third QUrl::AssumeLocalFile argument. The reason is that I don't want Kompare (or most other applications that accept either a file or a URL) to do a hostname lookup if it's passed a nonexisting file. I think it doesn't make any sense to assume a URL if no http:// is given. It sends mistyped file names out as DNS lookups, which can even be argued to be a security issue. Thus, the Kompare code will probably look like this: QUrl urlFromArg(const QString& arg) { #if QT_VERSION >= 0x050400 return QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile); #else // Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions) return (QUrl(arg, QUrl::TolerantMode).isRelative() && !QDir::isAbsolutePath(arg)) ? QUrl::fromLocalFile(QDir::current().absoluteFilePath(arg)) : QUrl::fromUserInput(arg); #endif } Kevin Kofler