diff --git a/src/loaders/lottie/tvgLottieParserHandler.cpp b/src/loaders/lottie/tvgLottieParserHandler.cpp index 05924afd..ea0a867b 100644 --- a/src/loaders/lottie/tvgLottieParserHandler.cpp +++ b/src/loaders/lottie/tvgLottieParserHandler.cpp @@ -45,13 +45,6 @@ #include "tvgLottieParserHandler.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ - -static const int PARSE_FLAGS = kParseDefaultFlags | kParseInsituFlag; - - /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -59,12 +52,12 @@ static const int PARSE_FLAGS = kParseDefaultFlags | kParseInsituFlag; bool LookaheadParserHandler::enterArray() { - if (state != kEnteringArray) { - Error(); - return false; + if (state == kEnteringArray) { + parseNext(); + return true; } - parseNext(); - return true; + Error(); + return false; } @@ -86,37 +79,37 @@ bool LookaheadParserHandler::nextArrayValue() int LookaheadParserHandler::getInt() { - if (state != kHasNumber) { - Error(); - return 0; + if (state == kHasNumber) { + auto result = val.GetInt(); + parseNext(); + return result; } - auto result = val.GetInt(); - parseNext(); - return result; + Error(); + return 0; } float LookaheadParserHandler::getFloat() { - if (state != kHasNumber) { - Error(); - return 0; + if (state == kHasNumber) { + auto result = val.GetFloat(); + parseNext(); + return result; } - auto result = val.GetFloat(); - parseNext(); - return result; + Error(); + return 0; } const char* LookaheadParserHandler::getString() { - if (state != kHasString) { - Error(); - return nullptr; + if (state == kHasString) { + auto result = val.GetString(); + parseNext(); + return result; } - auto result = val.GetString(); - parseNext(); - return result; + Error(); + return nullptr; } @@ -130,33 +123,29 @@ char* LookaheadParserHandler::getStringCopy() bool LookaheadParserHandler::getBool() { - if (state != kHasBool) { - Error(); - return false; + if (state == kHasBool) { + auto result = val.GetBool(); + parseNext(); + return result; } - auto result = val.GetBool(); - parseNext(); - return result; + Error(); + return false; } void LookaheadParserHandler::getNull() { - if (state != kHasNull) { - Error(); + if (state == kHasNull) { + parseNext(); return; } - parseNext(); + Error(); } bool LookaheadParserHandler::parseNext() { - if (reader.HasParseError()) { - Error(); - return false; - } - if (!reader.IterativeParseNext(iss, *this)) { + if (reader.HasParseError() || !reader.IterativeParseNext(iss, *this)) { Error(); return false; } @@ -166,12 +155,12 @@ bool LookaheadParserHandler::parseNext() bool LookaheadParserHandler::enterObject() { - if (state != kEnteringObject) { - Error(); - return false; + if (state == kEnteringObject) { + parseNext(); + return true; } - parseNext(); - return true; + Error(); + return false; } diff --git a/src/loaders/lottie/tvgLottieParserHandler.h b/src/loaders/lottie/tvgLottieParserHandler.h index 199f1594..1e824ea4 100644 --- a/src/loaders/lottie/tvgLottieParserHandler.h +++ b/src/loaders/lottie/tvgLottieParserHandler.h @@ -51,6 +51,7 @@ using namespace rapidjson; +#define PARSE_FLAGS (kParseDefaultFlags | kParseInsituFlag) struct LookaheadParserHandler { @@ -172,8 +173,9 @@ struct LookaheadParserHandler void Error() { - TVGERR("LOTTIE", "Parsing Error!"); + TVGERR("LOTTIE", "Invalid JSON: unexpected or misaligned data fields."); state = kError; + reader.IterativeParseNext(iss, *this); //something wrong but try advancement. } bool Invalid()