diff --git a/include/rapidjson/reader.h b/include/rapidjson/reader.h index cdc577a..b4d2d8b 100644 --- a/include/rapidjson/reader.h +++ b/include/rapidjson/reader.h @@ -947,6 +947,11 @@ private: case IterativeParsingArrayContentState: r = TransitFromArrayStates(state, is, handler); break; + case IterativeParsingFinishState: + // Any token appears after finish state leads to error state. + r = IterativeParsingErrorState; + RAPIDJSON_PARSE_ERROR_NORETURN(kParseErrorDocumentRootNotSingular, is.Tell()); + break; } return r; diff --git a/test/unittest/readertest.cpp b/test/unittest/readertest.cpp index eb63dec..cf4ca67 100644 --- a/test/unittest/readertest.cpp +++ b/test/unittest/readertest.cpp @@ -900,6 +900,16 @@ TEST(Reader, IterativeParsing_ElementCounting) { EXPECT_EQ(1, handler.ElementCount); } +TEST(Reader, IterativeParsing_AfterFinishState) { + StringStream json("{}, {}"); + Reader reader; + BaseReaderHandler<> handler; + + reader.IterativeParse(json, handler); + + EXPECT_TRUE(reader.HasParseError()); +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif