LottieParser parser(const_cast<char *>(buf.str().data()),
dirname(path).c_str());
mModel = parser.model();
+
+ if (!mModel) return false;
+
LottieFileCache::instance().add(path, mModel);
f.close();
LottieParser parser(const_cast<char *>(jsonData.c_str()),
resourcePath.c_str());
mModel = parser.model();
+
+ if (!mModel) return false;
+
LottieFileCache::instance().add(key, mModel);
return true;
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;
bool staticFlag = true;
while (NextArrayValue()) {
std::shared_ptr<LOTData> 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 {
EnterArray();
while (NextArrayValue()) {
std::shared_ptr<LOTData> 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);
}
}
}
+ if (!layer->mTransform) {
+ // not a valid layer
+ return nullptr;
+ }
+
layer->mCompRef = compRef;
if (layer->hidden()) {
std::shared_ptr<LOTModel> LottieParser::model()
{
+ if (!d->composition()) return nullptr;
+
std::shared_ptr<LOTModel> model = std::make_shared<LOTModel>();
model->mRoot = d->composition();
model->mRoot->processRepeaterObjects();