Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2021-03-23 14:42:20 +0300
committerHannah von Reth <vonreth@kde.org>2021-03-31 16:50:25 +0300
commite99eb0968904dc9e8de3449a2221183293ecc5cc (patch)
treef6ab0088d45264bae36b6d3a615ffae9fecf56ab /src/gui/socketapi
parent8c69bb70b3b0b357b29b0f45da5e8c91773696e6 (diff)
Don't crash if we got called with an invalid account
(cherry picked from commit 6d7820da44de55021c4e558dfa0f8895dbf10fcf)
Diffstat (limited to 'src/gui/socketapi')
-rw-r--r--src/gui/socketapi/socketuploadjob.cpp65
-rw-r--r--src/gui/socketapi/socketuploadjob.h8
2 files changed, 36 insertions, 37 deletions
diff --git a/src/gui/socketapi/socketuploadjob.cpp b/src/gui/socketapi/socketuploadjob.cpp
index 2e1b4f1ca..2adf40785 100644
--- a/src/gui/socketapi/socketuploadjob.cpp
+++ b/src/gui/socketapi/socketuploadjob.cpp
@@ -22,6 +22,7 @@
#include <QFileInfo>
#include <QJsonArray>
#include <QRegularExpression>
+#include <QTemporaryFile>
using namespace OCC;
@@ -29,67 +30,73 @@ SocketUploadJob::SocketUploadJob(const QSharedPointer<SocketApiJobV2> &job)
: _apiJob(job)
{
connect(job.data(), &SocketApiJobV2::finished, this, &SocketUploadJob::deleteLater);
+}
- _localPath = _apiJob->arguments()[QLatin1String("localPath")].toString();
- _remotePath = _apiJob->arguments()[QLatin1String("remotePath")].toString();
- if (!_remotePath.startsWith(QLatin1Char('/'))) {
- _remotePath = QLatin1Char('/') + _remotePath;
+void SocketUploadJob::start()
+{
+ const auto localPath = _apiJob->arguments()[QLatin1String("localPath")].toString();
+ auto remotePath = _apiJob->arguments()[QLatin1String("remotePath")].toString();
+ if (!remotePath.startsWith(QLatin1Char('/'))) {
+ remotePath = QLatin1Char('/') + remotePath;
}
- _pattern = job->arguments()[QLatin1String("pattern")].toString();
- const auto accname = job->arguments()[QLatin1String("account")][QLatin1String("name")].toString();
- const auto accUUID = QUuid::fromString(job->arguments()[QLatin1String("account")][QLatin1String("uuid")].toString());
+ const auto pattern = _apiJob->arguments()[QLatin1String("pattern")].toString();
+ const auto accname = _apiJob->arguments()[QLatin1String("account")][QLatin1String("name")].toString();
+ const auto accUUID = QUuid::fromString(_apiJob->arguments()[QLatin1String("account")][QLatin1String("uuid")].toString());
AccountStatePtr account;
if (accUUID.isNull()) {
- job->setWarning("Using the name as identifier is deprecated, please use the uuid");
+ _apiJob->setWarning("Using the name as identifier is deprecated, please use the uuid");
account = AccountManager::instance()->account(accname);
} else {
account = AccountManager::instance()->account(accUUID);
}
- if (!QFileInfo(_localPath).isAbsolute()) {
- job->failure(QStringLiteral("Local path must be a an absolute path"));
+ if (!account) {
+ _apiJob->failure(QStringLiteral("Failed to find %1").arg(QString::fromUtf8(QJsonDocument(_apiJob->arguments()[QLatin1String("account")].toObject()).toJson())));
return;
}
- if (!_tmp.open()) {
- job->failure(QStringLiteral("Failed to create temporary database"));
+
+ if (!QFileInfo(localPath).isAbsolute()) {
+ _apiJob->failure(QStringLiteral("Local path must be a an absolute path"));
+ return;
+ }
+ auto tmp = new QTemporaryFile(this);
+ if (!tmp->open()) {
+ _apiJob->failure(QStringLiteral("Failed to create temporary database"));
return;
}
- _db = new SyncJournalDb(_tmp.fileName(), this);
- _engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), _remotePath, _db);
- _engine->setParent(_db);
+ auto db = new SyncJournalDb(tmp->fileName(), this);
+ auto engine = new SyncEngine(account->account(), localPath.endsWith(QLatin1Char('/')) ? localPath : localPath + QLatin1Char('/'), remotePath, db);
+ engine->setParent(db);
- connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) {
+ connect(engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) {
_syncedFiles.append(item->_file);
});
- connect(_engine, &OCC::SyncEngine::finished, this, [this](bool ok) {
+ connect(engine, &OCC::SyncEngine::finished, this, [this, localPath](bool ok) {
if (ok) {
- _apiJob->success({ { "localPath", _localPath }, { "syncedFiles", QJsonArray::fromStringList(_syncedFiles) } });
+ _apiJob->success({ { "localPath", localPath }, { "syncedFiles", QJsonArray::fromStringList(_syncedFiles) } });
}
});
- connect(_engine, &OCC::SyncEngine::syncError, this, [this](const QString &error, ErrorCategory) {
+ connect(engine, &OCC::SyncEngine::syncError, this, [this](const QString &error, ErrorCategory) {
_apiJob->failure(error);
});
-}
-void SocketUploadJob::start()
-{
- auto opt = _engine->syncOptions();
- opt.setFilePattern(_pattern);
+ auto opt = engine->syncOptions();
+ opt.setFilePattern(pattern);
if (!opt.fileRegex().isValid()) {
_apiJob->failure(opt.fileRegex().errorString());
return;
}
- _engine->setSyncOptions(opt);
+ engine->setSyncOptions(opt);
// create the dir, fail if it already exists
- auto mkdir = new OCC::MkColJob(_engine->account(), _remotePath);
- connect(mkdir, &OCC::MkColJob::finishedWithoutError, _engine, &OCC::SyncEngine::startSync);
- connect(mkdir, &OCC::MkColJob::finishedWithError, this, [this](QNetworkReply *reply) {
+ auto mkdir = new OCC::MkColJob(engine->account(), remotePath);
+ connect(mkdir, &OCC::MkColJob::finishedWithoutError, engine, &OCC::SyncEngine::startSync);
+ connect(mkdir, &OCC::MkColJob::finishedWithError, this, [this, remotePath](QNetworkReply *reply) {
if (reply->error() == 202) {
- _apiJob->failure(QStringLiteral("Destination %1 already exists").arg(_remotePath));
+ _apiJob->failure(QStringLiteral("Destination %1 already exists").arg(remotePath));
} else {
_apiJob->failure(reply->errorString());
}
diff --git a/src/gui/socketapi/socketuploadjob.h b/src/gui/socketapi/socketuploadjob.h
index 3b04061d3..f7a80fe7a 100644
--- a/src/gui/socketapi/socketuploadjob.h
+++ b/src/gui/socketapi/socketuploadjob.h
@@ -14,8 +14,6 @@
#pragma once
#include <QObject>
-#include <QTemporaryFile>
-
#include "socketapi.h"
#include "account.h"
@@ -33,12 +31,6 @@ public:
private:
QSharedPointer<SocketApiJobV2> _apiJob;
- QString _localPath;
- QString _remotePath;
- QString _pattern;
- QTemporaryFile _tmp;
- SyncJournalDb *_db;
- SyncEngine *_engine;
QStringList _syncedFiles;
};
}