From 87e6e777e80bb88775b16d39bf96c11808911639 Mon Sep 17 00:00:00 2001 From: Alexei Rousskikh Date: Mon, 26 Mar 2012 18:02:22 -0400 Subject: improved error handling for schema loading Change-Id: I6befd1c483ed4af4fdf15d16ee8aecb9511bd1ac Reviewed-by: Chris Craig --- src/qtjsonschema/schemavalidator.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/qtjsonschema/schemavalidator.cpp b/src/qtjsonschema/schemavalidator.cpp index 09b14e2..a1da1b1 100644 --- a/src/qtjsonschema/schemavalidator.cpp +++ b/src/qtjsonschema/schemavalidator.cpp @@ -349,7 +349,26 @@ QJsonObject SchemaValidator::_loadFromFile(const QString &filename, SchemaNameIn */ QJsonObject SchemaValidator::_loadFromData(const QByteArray & json, const QString & name, SchemaNameInitialization type) { - QJsonDocument doc = QJsonDocument::fromJson(json); + QJsonParseError err; + QJsonDocument doc = QJsonDocument::fromJson(json, &err ); + if (QJsonParseError::NoError != err.error) + { + // calculate line and position from file offset + int nLine = 0, nPos = 1; + if (err.offset > 0) { + QByteArray b = QByteArray::fromRawData(json, err.offset); + nLine = b.count('\n'); + nPos = err.offset - b.lastIndexOf('\n'); + if (nPos > 0) + --nPos; + } + ++nLine; + + QString str; + str = QString::fromLatin1("JSON syntax error %1 in line %2 position %3").arg(err.error).arg(nLine).arg(nPos); + return makeError(SchemaError::InvalidObject, str); + } + QJsonObject schemaObject = doc.object(); //qDebug() << "shemaName " << name << " type= " << type; @@ -357,7 +376,7 @@ QJsonObject SchemaValidator::_loadFromData(const QByteArray & json, const QStrin if (doc.isNull() || schemaObject.isEmpty()) { - return makeError(SchemaError::InvalidObject, QStringLiteral("schema data is invalid")); + return makeError(SchemaError::InvalidObject, QStringLiteral("schema data can not be empty")); } QJsonObject ret; -- cgit v1.2.3