From 7d33b0151547b5b95f4d016a35746c9860844ea9 Mon Sep 17 00:00:00 2001 From: thebusytypist Date: Mon, 7 Jul 2014 21:57:23 +0800 Subject: [PATCH] Bugfix: add missing transition from finish state. --- include/rapidjson/reader.h | 5 +++++ test/unittest/readertest.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) 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