Running either of the following code snippets will cause a crash:
FString message = "}";
TSharedPtr<FJsonObject> pJsonObject;
FJsonSerializer::Deserialize(TJsonReaderFactory<>::Create(message), pJsonObject);
// or
FString message = "]";
TSharedPtr<FJsonObject> pJsonObject;
FJsonSerializer::Deserialize(TJsonReaderFactory<>::Create(message), pJsonObject);
The crash occures in JsonReader.h in the “bool NextToken( EJsonToken& OutToken )” when the ParseState object is poped on an empty object around line 410 or 418.
...
switch (Char)
{
case CharType('{'):
OutToken = EJsonToken::CurlyOpen; ParseState.Push( EJson::Object );
return true;
case CharType('}'):
OutToken = EJsonToken::CurlyClose; ParseState.Pop(); // Here
return true;
case CharType('['):
OutToken = EJsonToken::SquareOpen; ParseState.Push( EJson::Array );
return true;
case CharType(']'):
OutToken = EJsonToken::SquareClose; ParseState.Pop(); // Or Here
return true;
...