diff --git a/CHANGELOG.md b/CHANGELOG.md index 40524c01..eb99e2d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* Fixed parsing of comments (issue #421) + v5.8.1 ------ diff --git a/include/ArduinoJson/Deserialization/Comments.hpp b/include/ArduinoJson/Deserialization/Comments.hpp index 7ee42342..10e8d116 100644 --- a/include/ArduinoJson/Deserialization/Comments.hpp +++ b/include/ArduinoJson/Deserialization/Comments.hpp @@ -27,39 +27,27 @@ void skipSpacesAndComments(TInput& input) { // C-style block comment case '*': input.move(); // skip '/' - input.move(); // skip '*' + // no need to skip '*' for (;;) { - switch (input.current()) { - case '\0': - return; - case '*': - input.move(); // skip '*' - if (input.current() == '/') { - input.move(); // skip '/' - return; - } - break; - default: - input.move(); + input.move(); + if (input.current() == '\0') return; + if (input.current() == '*' && input.next() == '/') { + input.move(); // skip '*' + input.move(); // skip '/' + break; } } break; // C++-style line comment case '/': - input.move(); // skip '/' + // not need to skip "//" for (;;) { - switch (input.current()) { - case '\0': - return; - case '\n': - input.move(); - return; - default: - input.move(); - } + input.move(); + if (input.current() == '\0') return; + if (input.current() == '\n') break; } - return; + break; // not a comment, just a '/' default: diff --git a/test/JsonParser_Array_Tests.cpp b/test/JsonParser_Array_Tests.cpp index 0764e920..38cda595 100644 --- a/test/JsonParser_Array_Tests.cpp +++ b/test/JsonParser_Array_Tests.cpp @@ -237,7 +237,7 @@ TEST_F(JsonParser_Array_Tests, StringWithUnterminatedEscapeSequence) { } TEST_F(JsonParser_Array_Tests, CCommentBeforeOpeningBracket) { - whenInputIs("/*COMMENT*/[\"hello\"]"); + whenInputIs("/*COMMENT*/ [\"hello\"]"); parseMustSucceed(); sizeMustBe(1); @@ -245,7 +245,7 @@ TEST_F(JsonParser_Array_Tests, CCommentBeforeOpeningBracket) { } TEST_F(JsonParser_Array_Tests, CCommentAfterOpeningBracket) { - whenInputIs("[/*COMMENT*/\"hello\"]"); + whenInputIs("[/*COMMENT*/ \"hello\"]"); parseMustSucceed(); sizeMustBe(1); @@ -278,7 +278,7 @@ TEST_F(JsonParser_Array_Tests, CCommentBeforeComma) { } TEST_F(JsonParser_Array_Tests, CCommentAfterComma) { - whenInputIs("[\"hello\",/*COMMENT*/\"world\"]"); + whenInputIs("[\"hello\",/*COMMENT*/ \"world\"]"); parseMustSucceed(); sizeMustBe(2); @@ -287,7 +287,7 @@ TEST_F(JsonParser_Array_Tests, CCommentAfterComma) { } TEST_F(JsonParser_Array_Tests, CppCommentBeforeOpeningBracket) { - whenInputIs("//COMMENT\n[\"hello\"]"); + whenInputIs("//COMMENT\n\t[\"hello\"]"); parseMustSucceed(); sizeMustBe(1); @@ -303,7 +303,7 @@ TEST_F(JsonParser_Array_Tests, CppCommentAfterOpeningBracket) { } TEST_F(JsonParser_Array_Tests, CppCommentBeforeClosingBracket) { - whenInputIs("[\"hello\"//COMMENT\n]"); + whenInputIs("[\"hello\"//COMMENT\r\n]"); parseMustSucceed(); sizeMustBe(1);