Check specifically for GarbageAtEnd error

- Out parameter for garbage data\n- Rename parseUntilMalformed to parseUntilGarbage

Signed-off-by: Dylan Schooner <dschooner05@gmail.com>
(cherry picked from commit 51b47050f9)
This commit is contained in:
Dylan Schooner 2025-12-18 15:23:48 -05:00 committed by github-actions[bot]
parent 9fef9c7bd8
commit ab71c44ed6
4 changed files with 11 additions and 7 deletions

View file

@ -101,12 +101,16 @@ QJsonArray requireArray(const QJsonDocument& doc, const QString& what)
return doc.array();
}
QJsonDocument parseUntilMalformed(const QByteArray& json, QJsonParseError* error)
QJsonDocument parseUntilGarbage(const QByteArray& json, QJsonParseError* error, QString* garbage)
{
auto doc = QJsonDocument::fromJson(json, error);
if (error->error != QJsonParseError::NoError) {
QByteArray validJson = json.left(error->offset);
if (error->error == QJsonParseError::GarbageAtEnd) {
qsizetype offset = error->offset;
QByteArray validJson = json.left(offset);
doc = QJsonDocument::fromJson(validJson, error);
if (garbage)
*garbage = json.right(json.size() - offset);
}
return doc;

View file

@ -107,8 +107,8 @@ QJsonArray toJsonArray(const QList<T>& container)
////////////////// READING ////////////////////
// Attempt to parse JSON up until unexpected data is encountered
QJsonDocument parseUntilMalformed(const QByteArray& json, QJsonParseError* error = nullptr);
// Attempt to parse JSON up until garbage is encountered
QJsonDocument parseUntilGarbage(const QByteArray& json, QJsonParseError* error = nullptr, QString* garbage = nullptr);
/// @throw JsonException
template <typename T>

View file

@ -169,7 +169,7 @@ bool processZIP(DataPack* pack, ProcessingLevel level)
bool processMCMeta(DataPack* pack, QByteArray&& raw_data)
{
QJsonParseError parse_error;
auto json_doc = Json::parseUntilMalformed(raw_data, &parse_error);
auto json_doc = Json::parseUntilGarbage(raw_data, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Failed to parse JSON:" << parse_error.errorString();
return false;

View file

@ -81,7 +81,7 @@ void McClient::parseResponse()
// 'resp' should now be the JSON string
QJsonParseError parseError;
QJsonDocument doc = Json::parseUntilMalformed(m_resp, &parseError);
QJsonDocument doc = Json::parseUntilGarbage(m_resp, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qDebug() << "Failed to parse JSON:" << parseError.errorString();
emitFail(parseError.errorString());