Trailing comma should result in an error during JSON parsing
1. QJsonParseError::MissingObject defined
2. QJsonDocument::fromJson() will result in defined error after parsing
of something like "{ 'key':1 , }" or "[ {'key':1}, ]"
Change-Id: I8e6234a03b8aca4e5ad6180f273f91066b86d7a1
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
bb10
parent
0353430806
commit
612040a0cd
|
|
@ -67,7 +67,8 @@ struct Q_CORE_EXPORT QJsonParseError
|
|||
IllegalNumber,
|
||||
StringEscapeSequence,
|
||||
StringUTF8Scan,
|
||||
EndOfString
|
||||
EndOfString,
|
||||
MissingObject
|
||||
};
|
||||
|
||||
int offset;
|
||||
|
|
|
|||
|
|
@ -244,6 +244,10 @@ bool Parser::parseObject()
|
|||
if (token != ValueSeparator)
|
||||
break;
|
||||
token = nextToken();
|
||||
if (token == EndObject) {
|
||||
lastError = QJsonParseError::MissingObject;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG << "end token=" << token;
|
||||
|
|
@ -449,6 +453,9 @@ bool Parser::parseValue(QJsonPrivate::Value *val, int baseOffset)
|
|||
DEBUG << "value: object";
|
||||
END;
|
||||
return true;
|
||||
case EndArray:
|
||||
lastError = QJsonParseError::MissingObject;
|
||||
return false;
|
||||
default:
|
||||
--json;
|
||||
if (!parseNumber(val, baseOffset))
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ private Q_SLOTS:
|
|||
|
||||
void assignObjects();
|
||||
void assignArrays();
|
||||
|
||||
void testTrailingComma();
|
||||
private:
|
||||
QString testDataDir;
|
||||
};
|
||||
|
|
@ -1807,5 +1809,16 @@ void TestQtJson::assignArrays()
|
|||
QCOMPARE(inner.at(0).toDouble(), 2.);
|
||||
}
|
||||
|
||||
void TestQtJson::testTrailingComma()
|
||||
{
|
||||
const char *jsons[] = { "{ \"Key\": 1, }", "[ { \"Key\": 1 }, ]" };
|
||||
|
||||
for (unsigned i = 0; i < sizeof(jsons)/sizeof(jsons[0]); ++i) {
|
||||
QJsonParseError error;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(jsons[i], &error);
|
||||
QCOMPARE(error.error, QJsonParseError::MissingObject);
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestQtJson)
|
||||
#include "tst_qtjson.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue