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
Alexei Rousskikh 2012-03-12 14:33:39 -04:00 committed by Qt by Nokia
parent 0353430806
commit 612040a0cd
3 changed files with 22 additions and 1 deletions

View File

@ -67,7 +67,8 @@ struct Q_CORE_EXPORT QJsonParseError
IllegalNumber,
StringEscapeSequence,
StringUTF8Scan,
EndOfString
EndOfString,
MissingObject
};
int offset;

View File

@ -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))

View File

@ -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"