From: sub.mohanty@samsung.com Date: Sun, 7 Jul 2019 04:36:59 +0000 (+0900) Subject: rlottie: Fix Crash when the resource is not a valid lottie resource X-Git-Tag: submit/tizen/20190718.020831~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7b6ba0270a305ecefef269f37c57a70b1479c7f8;p=platform%2Fcore%2Fuifw%2Flottie-player.git rlottie: Fix Crash when the resource is not a valid lottie resource - when resource dosen't have valid header - layer dosen't have a transform object --- diff --git a/src/lottie/lottieloader.cpp b/src/lottie/lottieloader.cpp index b39284e..158486a 100644 --- a/src/lottie/lottieloader.cpp +++ b/src/lottie/lottieloader.cpp @@ -96,6 +96,9 @@ bool LottieLoader::load(const std::string &path) LottieParser parser(const_cast(buf.str().data()), dirname(path).c_str()); mModel = parser.model(); + + if (!mModel) return false; + LottieFileCache::instance().add(path, mModel); f.close(); @@ -113,6 +116,9 @@ bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key, LottieParser parser(const_cast(jsonData.c_str()), resourcePath.c_str()); mModel = parser.model(); + + if (!mModel) return false; + LottieFileCache::instance().add(key, mModel); return true; diff --git a/src/lottie/lottieparser.cpp b/src/lottie/lottieparser.cpp index 5f88aeb..08dbf60 100644 --- a/src/lottie/lottieparser.cpp +++ b/src/lottie/lottieparser.cpp @@ -585,6 +585,12 @@ void LottieParserImpl::parseComposition() Skip(key); } } + + if (comp->mVersion.empty()) { + // don't have a valid bodymovin header + return; + } + resolveLayerRefs(); comp->setStatic(comp->mRootLayer->isStatic()); comp->mRootLayer->mInFrame = comp->mStartFrame; @@ -709,8 +715,10 @@ std::shared_ptr LottieParserImpl::parseAsset() bool staticFlag = true; while (NextArrayValue()) { std::shared_ptr layer = parseLayer(); - staticFlag = staticFlag && layer->isStatic(); - asset->mLayers.push_back(layer); + if (layer) { + staticFlag = staticFlag && layer->isStatic(); + asset->mLayers.push_back(layer); + } } asset->setStatic(staticFlag); } else { @@ -745,8 +753,10 @@ void LottieParserImpl::parseLayers(LOTCompositionData *comp) EnterArray(); while (NextArrayValue()) { std::shared_ptr layer = parseLayer(true); - staticFlag = staticFlag && layer->isStatic(); - comp->mRootLayer->mChildren.push_back(layer); + if (layer) { + staticFlag = staticFlag && layer->isStatic(); + comp->mRootLayer->mChildren.push_back(layer); + } } comp->mRootLayer->setStatic(staticFlag); } @@ -915,6 +925,11 @@ std::shared_ptr LottieParserImpl::parseLayer(bool record) } } + if (!layer->mTransform) { + // not a valid layer + return nullptr; + } + layer->mCompRef = compRef; if (layer->hidden()) { @@ -2240,6 +2255,8 @@ LottieParser::LottieParser(char *str, const char *dir_path) std::shared_ptr LottieParser::model() { + if (!d->composition()) return nullptr; + std::shared_ptr model = std::make_shared(); model->mRoot = d->composition(); model->mRoot->processRepeaterObjects();