diff options
author | Alexei Rousskikh <ext-alexei.rousskikh@nokia.com> | 2012-03-12 14:33:39 -0400 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-12 21:38:51 +0100 |
commit | 612040a0cd702e4c764e5cbb5d0c091497650c6a (patch) | |
tree | a47186f97ae77e71495c4e6b3765a2d9d5236491 | |
parent | 0353430806fb14b438cf7d68c68d8cdbcb57ef45 (diff) |
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>
-rw-r--r-- | src/corelib/json/qjsondocument.h | 3 | ||||
-rw-r--r-- | src/corelib/json/qjsonparser.cpp | 7 | ||||
-rw-r--r-- | tests/auto/corelib/json/tst_qtjson.cpp | 13 |
3 files changed, 22 insertions, 1 deletions
diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h index 7eca0302db..e39dc6a27c 100644 --- a/src/corelib/json/qjsondocument.h +++ b/src/corelib/json/qjsondocument.h @@ -67,7 +67,8 @@ struct Q_CORE_EXPORT QJsonParseError IllegalNumber, StringEscapeSequence, StringUTF8Scan, - EndOfString + EndOfString, + MissingObject }; int offset; diff --git a/src/corelib/json/qjsonparser.cpp b/src/corelib/json/qjsonparser.cpp index a83685da22..b1e6a5a5c7 100644 --- a/src/corelib/json/qjsonparser.cpp +++ b/src/corelib/json/qjsonparser.cpp @@ -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)) diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 079ff6e76b..87820d2e78 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -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" |