diff --git a/core/jsonxx.cpp b/core/jsonxx.cpp index 9802152a..e3b307a9 100644 --- a/core/jsonxx.cpp +++ b/core/jsonxx.cpp @@ -72,7 +72,29 @@ bool parse_string(std::istream& input, std::string* value) { char ch; while(!input.eof() && input.good()) { input.get(ch); - if (ch == '"') { + if (ch == '\\') { + if (input.eof()) + return false; + char ch1; + input.get(ch1); + switch (ch1) { + case '"': + case '\\': + case '/': value->push_back(ch1); break; + case 'b': value->push_back('\b'); break; + case 'f': value->push_back('\f'); break; + case 'n': value->push_back('\n'); break; + case 'r': value->push_back('\r'); break; + case 't': value->push_back('\t'); break; + case 'u': { + // ERROR("todo: unicode\n"); + return false; + } break; + default: return false; + } + } + + if (ch == '"' ) { break; } value->push_back(ch);