diff --git a/src/loaders/lottie/tvgLottieParserHandler.cpp b/src/loaders/lottie/tvgLottieParserHandler.cpp index 0df2daab..6b1a5b9f 100644 --- a/src/loaders/lottie/tvgLottieParserHandler.cpp +++ b/src/loaders/lottie/tvgLottieParserHandler.cpp @@ -46,13 +46,6 @@ #include "tvgLottieParserHandler.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ - -static const int PARSE_FLAGS = kParseDefaultFlags | kParseInsituFlag; - - /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -60,12 +53,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; } @@ -87,37 +80,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; } @@ -131,33 +124,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; } @@ -167,12 +156,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 6c595022..507b830e 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()