diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 164dacdb..21c34e2b 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -1161,16 +1161,26 @@ void LottieParser::getLayerSize(float& val) LottieMask* LottieParser::parseMask() { auto mask = new LottieMask; + auto valid = true; //skip if the mask mode is none. enterObject(); while (auto key = nextObjectKey()) { if (KEY_AS("inv")) mask->inverse = getBool(); - else if (KEY_AS("mode")) mask->method = getMaskMethod(mask->inverse); - else if (KEY_AS("pt")) getPathSet(mask->pathset); - else if (KEY_AS("o")) parseProperty(mask->opacity); + else if (KEY_AS("mode")) + { + mask->method = getMaskMethod(mask->inverse); + if (mask->method == CompositeMethod::None) valid = false; + } + else if (valid && KEY_AS("pt")) getPathSet(mask->pathset); + else if (valid && KEY_AS("o")) parseProperty(mask->opacity); else skip(key); } + if (!valid) { + delete(mask); + return nullptr; + } + return mask; } @@ -1179,8 +1189,9 @@ void LottieParser::parseMasks(LottieLayer* layer) { enterArray(); while (nextArrayValue()) { - auto mask = parseMask(); - layer->masks.push(mask); + if (auto mask = parseMask()) { + layer->masks.push(mask); + } } }