mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2026-06-29 01:54:20 +03:00
Check specifically for GarbageAtEnd error
- Out parameter for garbage data\n- Rename parseUntilMalformed to parseUntilGarbage Signed-off-by: Dylan Schooner <dschooner05@gmail.com>
This commit is contained in:
parent
9c7fe72f9c
commit
51b47050f9
4 changed files with 11 additions and 7 deletions
|
|
@ -101,12 +101,16 @@ QJsonArray requireArray(const QJsonDocument& doc, const QString& what)
|
||||||
return doc.array();
|
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);
|
auto doc = QJsonDocument::fromJson(json, error);
|
||||||
if (error->error != QJsonParseError::NoError) {
|
if (error->error == QJsonParseError::GarbageAtEnd) {
|
||||||
QByteArray validJson = json.left(error->offset);
|
qsizetype offset = error->offset;
|
||||||
|
QByteArray validJson = json.left(offset);
|
||||||
doc = QJsonDocument::fromJson(validJson, error);
|
doc = QJsonDocument::fromJson(validJson, error);
|
||||||
|
|
||||||
|
if (garbage)
|
||||||
|
*garbage = json.right(json.size() - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return doc;
|
return doc;
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,8 @@ QJsonArray toJsonArray(const QList<T>& container)
|
||||||
|
|
||||||
////////////////// READING ////////////////////
|
////////////////// READING ////////////////////
|
||||||
|
|
||||||
// Attempt to parse JSON up until unexpected data is encountered
|
// Attempt to parse JSON up until garbage is encountered
|
||||||
QJsonDocument parseUntilMalformed(const QByteArray& json, QJsonParseError* error = nullptr);
|
QJsonDocument parseUntilGarbage(const QByteArray& json, QJsonParseError* error = nullptr, QString* garbage = nullptr);
|
||||||
|
|
||||||
/// @throw JsonException
|
/// @throw JsonException
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ bool processZIP(DataPack* pack, ProcessingLevel level)
|
||||||
bool processMCMeta(DataPack* pack, QByteArray&& raw_data)
|
bool processMCMeta(DataPack* pack, QByteArray&& raw_data)
|
||||||
{
|
{
|
||||||
QJsonParseError parse_error;
|
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) {
|
if (parse_error.error != QJsonParseError::NoError) {
|
||||||
qWarning() << "Failed to parse JSON:" << parse_error.errorString();
|
qWarning() << "Failed to parse JSON:" << parse_error.errorString();
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ void McClient::parseResponse()
|
||||||
|
|
||||||
// 'resp' should now be the JSON string
|
// 'resp' should now be the JSON string
|
||||||
QJsonParseError parseError;
|
QJsonParseError parseError;
|
||||||
QJsonDocument doc = Json::parseUntilMalformed(m_resp, &parseError);
|
QJsonDocument doc = Json::parseUntilGarbage(m_resp, &parseError);
|
||||||
if (parseError.error != QJsonParseError::NoError) {
|
if (parseError.error != QJsonParseError::NoError) {
|
||||||
qDebug() << "Failed to parse JSON:" << parseError.errorString();
|
qDebug() << "Failed to parse JSON:" << parseError.errorString();
|
||||||
emitFail(parseError.errorString());
|
emitFail(parseError.errorString());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue