server player req: parse malformed json (#4512)

This commit is contained in:
Alexandru Ionut Tripon
2025-12-16 16:35:20 +02:00
committed by GitHub
2 changed files with 19 additions and 2 deletions

View File

@@ -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());
}

View File

@@ -1,13 +1,19 @@
#include <QFutureWatcher>
#include <Json.h>
#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()