diff options
Diffstat (limited to 'launcher/net')
-rw-r--r-- | launcher/net/HttpMetaCache.cpp | 19 | ||||
-rw-r--r-- | launcher/net/NetJob.cpp | 5 | ||||
-rw-r--r-- | launcher/net/NetJob.h | 4 |
3 files changed, 23 insertions, 5 deletions
diff --git a/launcher/net/HttpMetaCache.cpp b/launcher/net/HttpMetaCache.cpp index 7809d40f..f37bc0bf 100644 --- a/launcher/net/HttpMetaCache.cpp +++ b/launcher/net/HttpMetaCache.cpp @@ -218,9 +218,24 @@ void HttpMetaCache::Load() if (!index.open(QIODevice::ReadOnly)) return; - QJsonDocument json = QJsonDocument::fromJson(index.readAll()); + QJsonParseError parseError; + QJsonDocument json = QJsonDocument::fromJson(index.readAll(), &parseError); + + // Fail if the JSON is invalid. + if (parseError.error != QJsonParseError::NoError) { + qCritical() << QString("Failed to parse HttpMetaCache file: %1 at offset %2") + .arg(parseError.errorString(), QString::number(parseError.offset)) + .toUtf8(); + return; + } + + // Make sure the root is an object. + if (!json.isObject()) { + qCritical() << "HttpMetaCache root should be an object."; + return; + } - auto root = Json::requireObject(json, "HttpMetaCache root"); + auto root = json.object(); // check file version first auto version_val = Json::ensureString(root, "version"); diff --git a/launcher/net/NetJob.cpp b/launcher/net/NetJob.cpp index 3869316e..b99c5acb 100644 --- a/launcher/net/NetJob.cpp +++ b/launcher/net/NetJob.cpp @@ -36,6 +36,11 @@ */ #include "NetJob.h" +#include "Application.h" + +NetJob::NetJob(QString job_name, shared_qobject_ptr<QNetworkAccessManager> network) + : ConcurrentTask(nullptr, job_name, APPLICATION->settings()->get("NumberOfConcurrentDownloads").toInt()), m_network(network) +{} auto NetJob::addNetAction(NetAction::Ptr action) -> bool { diff --git a/launcher/net/NetJob.h b/launcher/net/NetJob.h index cc63f449..1c4337ec 100644 --- a/launcher/net/NetJob.h +++ b/launcher/net/NetJob.h @@ -52,9 +52,7 @@ class NetJob : public ConcurrentTask { public: using Ptr = shared_qobject_ptr<NetJob>; - explicit NetJob(QString job_name, shared_qobject_ptr<QNetworkAccessManager> network) - : ConcurrentTask(nullptr, job_name), m_network(network) - {} + explicit NetJob(QString job_name, shared_qobject_ptr<QNetworkAccessManager> network); ~NetJob() override = default; void startNext() override; |