From 0879785839f195c9f90ae6196e022a5072d623a3 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 28 May 2015 17:48:49 +0200 Subject: RemoteLinux: Fix upload for target file paths with spaces. In addition to causing an unhelpful error message, we would also create directories at unwanted places. For instance, deploying to a directory called "/tmp/test dir" would result in this: mkdir -p /tmp/test dir Which created two unwanted directories, one of them at a completely unrelated place. Task-number: QTCREATORBUG-14518 Change-Id: Ie1c287ca73d0815b9bed335141adb901e361e3e6 Reviewed-by: Eike Ziller Reviewed-by: Karsten Sperling Opdal Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/genericdirectuploadservice.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/remotelinux/genericdirectuploadservice.cpp b/src/plugins/remotelinux/genericdirectuploadservice.cpp index dd9d1f93a7..a5852ade3a 100644 --- a/src/plugins/remotelinux/genericdirectuploadservice.cpp +++ b/src/plugins/remotelinux/genericdirectuploadservice.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -184,7 +185,8 @@ void GenericDirectUploadService::handleUploadFinished(SftpJobId jobId, const QSt // This is done for Windows. if (df.isExecutable()) { - const QString command = QLatin1String("chmod a+x ") + df.remoteFilePath(); + const QString command = QLatin1String("chmod a+x ") + + Utils::QtcProcess::quoteArgUnix(df.remoteFilePath()); d->chmodProc = connection()->createRemoteProcess(command.toUtf8()); connect(d->chmodProc.data(), SIGNAL(closed(int)), SLOT(handleChmodFinished(int))); connect(d->chmodProc.data(), SIGNAL(readyReadStandardOutput()), @@ -263,8 +265,9 @@ void GenericDirectUploadService::handleMkdirFinished(int exitStatus) const QString remoteFilePath = df.remoteDirectory() + QLatin1Char('/') + fi.fileName(); if (fi.isSymLink()) { const QString target = fi.dir().relativeFilePath(fi.symLinkTarget()); // see QTBUG-5817. - const QString command = QLatin1String("ln -sf ") + target + QLatin1Char(' ') - + remoteFilePath; + const QStringList args = QStringList() << QLatin1String("ln") << QLatin1String("-sf") + << target << remoteFilePath; + const QString command = Utils::QtcProcess::joinArgs(args, Utils::OsTypeLinux); // See comment in SftpChannel::createLink as to why we can't use it. d->lnProc = connection()->createRemoteProcess(command.toUtf8()); @@ -370,7 +373,8 @@ void GenericDirectUploadService::uploadNextFile() QFileInfo fi = df.localFilePath().toFileInfo(); if (fi.isDir()) dirToCreate += QLatin1Char('/') + fi.fileName(); - const QString command = QLatin1String("mkdir -p ") + dirToCreate; + const QString command = QLatin1String("mkdir -p ") + + Utils::QtcProcess::quoteArgUnix(dirToCreate); d->mkdirProc = connection()->createRemoteProcess(command.toUtf8()); connect(d->mkdirProc.data(), SIGNAL(closed(int)), SLOT(handleMkdirFinished(int))); connect(d->mkdirProc.data(), SIGNAL(readyReadStandardOutput()), SLOT(handleStdOutData())); -- cgit v1.2.3