From a6c677ca70462dda0e7bdf3723093bb7ae5d82ff Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Mon, 8 Apr 2019 18:11:44 +0300 Subject: LottieAnimation: fix error reporting for JSON parser related issues * add some verbosity * statusChanged() signal was never fired for parse errors Change-Id: Idc2a43140eaebeb8ed1d822075f39e742be0e404 Reviewed-by: Rebecca Worledge --- src/imports/lottieanimation.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/imports/lottieanimation.cpp b/src/imports/lottieanimation.cpp index dddf88a..db49e10 100644 --- a/src/imports/lottieanimation.cpp +++ b/src/imports/lottieanimation.cpp @@ -566,7 +566,11 @@ bool LottieAnimation::loadSource(QString filename) } QByteArray json = sourceFile.readAll(); - parse(json); + if (Q_UNLIKELY(parse(json) == -1)) { + m_status = Error; + emit statusChanged(); + return false; + } setWidth(m_animWidth); emit widthChanged(); @@ -624,14 +628,18 @@ int LottieAnimation::parse(QByteArray jsonSource) { m_jsonSource = jsonSource; - QJsonDocument doc = QJsonDocument::fromJson(jsonSource); - QJsonObject rootObj = doc.object(); - - if (rootObj.empty()) { - m_status = Error; + QJsonParseError error; + QJsonDocument doc = QJsonDocument::fromJson(m_jsonSource, &error); + if (Q_UNLIKELY(error.error != QJsonParseError::NoError)) { + qCWarning(lcLottieQtBodymovinParser) + << "JSON parse error:" << error.errorString(); return -1; } + QJsonObject rootObj = doc.object(); + if (Q_UNLIKELY(rootObj.empty())) + return -1; + m_startFrame = rootObj.value(QLatin1String("ip")).toVariant().toInt(); m_endFrame = rootObj.value(QLatin1String("op")).toVariant().toInt(); m_frameRate = rootObj.value(QLatin1String("fr")).toVariant().toInt(); -- cgit v1.2.3