diff --git a/launcher/ui/pages/instance/McClient.cpp b/launcher/ui/pages/instance/McClient.cpp index 11b3a22d1..e42342a11 100644 --- a/launcher/ui/pages/instance/McClient.cpp +++ b/launcher/ui/pages/instance/McClient.cpp @@ -80,7 +80,18 @@ void McClient::parseResponse() Q_UNUSED(readVarInt(m_resp)); // json length // 'resp' should now be the JSON string - QJsonDocument doc = QJsonDocument::fromJson(m_resp); + QJsonParseError parseError; + QJsonDocument doc = QJsonDocument::fromJson(m_resp, &parseError); + if (parseError.error != QJsonParseError::NoError) { + QByteArray validJson = m_resp.left(parseError.offset); + doc = QJsonDocument::fromJson(validJson, &parseError); + + if (parseError.error != QJsonParseError::NoError) { + qDebug() << "Failed to parse JSON:" << parseError.errorString(); + emitFail(parseError.errorString()); + return; + } + } emitSucceed(doc.object()); } diff --git a/launcher/ui/pages/instance/ServerPingTask.cpp b/launcher/ui/pages/instance/ServerPingTask.cpp index cd2ff31d8..f88865afc 100644 --- a/launcher/ui/pages/instance/ServerPingTask.cpp +++ b/launcher/ui/pages/instance/ServerPingTask.cpp @@ -1,13 +1,19 @@ #include #include +#include "Exception.h" #include "McClient.h" #include "McResolver.h" #include "ServerPingTask.h" unsigned getOnlinePlayers(QJsonObject data) { - return Json::requireInteger(Json::requireObject(data, "players"), "online"); + try { + return Json::requireInteger(Json::requireObject(data, "players"), "online"); + } catch (Exception& e) { + qWarning() << "server ping failed to parse response" << e.what(); + return 0; + } } void ServerPingTask::executeTask()