Fix receiving files with invalid URL characters

Summary:
QUrl constructor assumes the string passed is already encoded so we need
to pass it through setPath and QUrl::DecodedMode.

Test Plan: sent a file with a weird character

Reviewers: #kde_connect, jeanv

Reviewed By: jeanv

Differential Revision: https://phabricator.kde.org/D7224
This commit is contained in:
Aleix Pol 2017-08-10 01:23:47 +02:00
parent 815c2fe910
commit 28f11bd5c9

View file

@ -87,13 +87,14 @@ bool SharePlugin::receivePackage(const NetworkPackage& np)
qCDebug(KDECONNECT_PLUGIN_SHARE) << "File transfer";
if (np.hasPayload()) {
//qCDebug(KDECONNECT_PLUGIN_SHARE) << "receiving file";
const QString filename = np.get<QString>(QStringLiteral("filename"), QString::number(QDateTime::currentMSecsSinceEpoch()));
const QUrl dir = destinationDir().adjusted(QUrl::StripTrailingSlash);
QUrl destination(dir.toString() + '/' + filename);
QUrl destination(dir);
destination.setPath(dir.path() + '/' + filename, QUrl::DecodedMode);
if (destination.isLocalFile() && QFile::exists(destination.toLocalFile())) {
destination = QUrl(dir.toString() + '/' + KIO::suggestName(dir, filename));
destination.setPath(dir.path() + '/' + KIO::suggestName(dir, filename), QUrl::DecodedMode);
}
// qCDebug(KDECONNECT_PLUGIN_SHARE) << "receiving file" << filename << "in" << dir << "into" << destination;
FileTransferJob* job = np.createPayloadTransferJob(destination);
job->setOriginName(device()->name() + ": " + filename);