Commit a1a8abd0 authored by Milo Yip's avatar Milo Yip

Add safe checks in parsing compound types.

Compound types (object and array) call ParseString() and ParseValue()
for key and values. If there is parse errors inside those calls, it
should stop continue parsing. Otherwise, it may be possible to continue
parsing and calling handler incorrectly.
For example, in ["a\u,","b"], \u generates an error (it should follow
but 4 hex digits), the parser continues to treat the first comma as
element separator, and treat "," as a JSON string and call the handler.
It may be unacceptable in the application code.
parent 3d9dd745
......@@ -277,6 +277,9 @@ private:
RAPIDJSON_PARSE_ERROR("Name of an object member must be a string", is.Tell());
ParseString<parseFlags>(is, handler);
if (HasParseError())
return;
SkipWhitespace(is);
if (is.Take() != ':')
......@@ -285,6 +288,9 @@ private:
SkipWhitespace(is);
ParseValue<parseFlags>(is, handler);
if (HasParseError())
return;
SkipWhitespace(is);
++memberCount;
......@@ -313,6 +319,9 @@ private:
for (SizeType elementCount = 0;;) {
ParseValue<parseFlags>(is, handler);
if (HasParseError())
return;
++elementCount;
SkipWhitespace(is);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment