summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexei Rousskikh <ext-alexei.rousskikh@nokia.com>2012-03-12 14:33:39 -0400
committerQt by Nokia <qt-info@nokia.com>2012-03-12 21:38:51 +0100
commit612040a0cd702e4c764e5cbb5d0c091497650c6a (patch)
treea47186f97ae77e71495c4e6b3765a2d9d5236491
parent0353430806fb14b438cf7d68c68d8cdbcb57ef45 (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.h3
-rw-r--r--src/corelib/json/qjsonparser.cpp7
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp13
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"