From b7e34100ed167b8134b41fcff0918895dd4e61fb Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Fri, 10 Apr 2015 20:36:27 +0800 Subject: [PATCH] Fix #288 double quote in unicode escape --- include/rapidjson/reader.h | 2 ++ test/unittest/readertest.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/include/rapidjson/reader.h b/include/rapidjson/reader.h index a59f26e..0ee2523 100644 --- a/include/rapidjson/reader.h +++ b/include/rapidjson/reader.h @@ -689,11 +689,13 @@ private: } else if (e == 'u') { // Unicode unsigned codepoint = ParseHex4(is); + RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID; if (codepoint >= 0xD800 && codepoint <= 0xDBFF) { // Handle UTF-16 surrogate pair if (is.Take() != '\\' || is.Take() != 'u') RAPIDJSON_PARSE_ERROR(kParseErrorStringUnicodeSurrogateInvalid, is.Tell() - 2); unsigned codepoint2 = ParseHex4(is); + RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID; if (codepoint2 < 0xDC00 || codepoint2 > 0xDFFF) RAPIDJSON_PARSE_ERROR(kParseErrorStringUnicodeSurrogateInvalid, is.Tell() - 2); codepoint = (((codepoint - 0xD800) << 10) | (codepoint2 - 0xDC00)) + 0x10000; diff --git a/test/unittest/readertest.cpp b/test/unittest/readertest.cpp index 64904b0..b6dffbc 100644 --- a/test/unittest/readertest.cpp +++ b/test/unittest/readertest.cpp @@ -517,6 +517,10 @@ TEST(Reader, ParseString_Error) { // Incorrect hex digit after \\u escape in string. TEST_STRING_ERROR(kParseErrorStringUnicodeEscapeInvalidHex, "[\"\\uABCG\"]"); + // Quotation in \\u escape in string (Issue #288) + TEST_STRING_ERROR(kParseErrorStringUnicodeEscapeInvalidHex, "[\"\\uaaa\"]"); + TEST_STRING_ERROR(kParseErrorStringUnicodeEscapeInvalidHex, "[\"\\uD800\\uFFF\"]"); + // The surrogate pair in string is invalid. TEST_STRING_ERROR(kParseErrorStringUnicodeSurrogateInvalid, "[\"\\uD800X\"]"); TEST_STRING_ERROR(kParseErrorStringUnicodeSurrogateInvalid, "[\"\\uD800\\uFFFF\"]");