diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index a0e35c01..9b5523ec 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -318,17 +318,22 @@ void LottieParser::getValue(float& val) } -void LottieParser::getValue(Point& pt) +bool LottieParser::getValue(Point& pt) { + auto type = peekType(); + if (type == kNullType) return false; + int i = 0; auto ptr = (float*)(&pt); - if (peekType() == kArrayType) enterArray(); + if (type == kArrayType) enterArray(); while (nextArrayValue()) { auto val = getFloat(); if (i < 2) ptr[i++] = val; } + + return true; } @@ -370,14 +375,11 @@ void LottieParser::parseSlotProperty(T& prop) template bool LottieParser::parseTangent(const char *key, LottieVectorFrame& value) { - if (KEY_AS("ti")) { - value.hasTangent = true; - getValue(value.inTangent); - } else if (KEY_AS("to")) { - value.hasTangent = true; - getValue(value.outTangent); - } else return false; + if (KEY_AS("ti") && getValue(value.inTangent)) ; + else if (KEY_AS("to") && getValue(value.outTangent)) ; + else return false; + value.hasTangent = true; return true; } diff --git a/src/loaders/lottie/tvgLottieParser.h b/src/loaders/lottie/tvgLottieParser.h index 2c8d4d36..61191e18 100644 --- a/src/loaders/lottie/tvgLottieParser.h +++ b/src/loaders/lottie/tvgLottieParser.h @@ -61,8 +61,8 @@ private: void getValue(ColorStop& color); void getValue(float& val); void getValue(uint8_t& val); - void getValue(Point& pt); void getValue(RGB24& color); + bool getValue(Point& pt); template bool parseTangent(const char *key, LottieVectorFrame& value); template bool parseTangent(const char *key, LottieScalarFrame& value);