mirror of
https://github.com/pocoproject/poco.git
synced 2025-02-20 22:31:23 +01:00
GH #482: Poco::JSON::Stringifier::stringify bad behaviour
This commit is contained in:
parent
d9b1b5f4d0
commit
32d4c1eb07
@ -73,11 +73,18 @@ void Stringifier::formatString(const std::string& value, std::ostream& out)
|
||||
for (std::string::const_iterator it = value.begin(),
|
||||
end = value.end(); it != end; ++it)
|
||||
{
|
||||
if (*it <= 0x1F || *it == '"' || *it == '\\' || *it == '/')
|
||||
switch (*it)
|
||||
{
|
||||
out << '\\';
|
||||
case '\\': out << "\\\\"; break;
|
||||
case '"': out << "\\\""; break;
|
||||
case '/': out << "\\/"; break;
|
||||
case '\b': out << "\\b"; break;
|
||||
case '\f': out << "\\f"; break;
|
||||
case '\n': out << "\\n"; break;
|
||||
case '\r': out << "\\r"; break;
|
||||
case '\t': out << "\\t"; break;
|
||||
default: out << *it; break;
|
||||
}
|
||||
out << *it;
|
||||
}
|
||||
out << '"';
|
||||
}
|
||||
|
@ -1223,15 +1223,32 @@ void JSONTest::testPrintHandler()
|
||||
|
||||
void JSONTest::testStringify()
|
||||
{
|
||||
std::string str1 = "\r";
|
||||
std::string str2 = "\n";
|
||||
Poco::JSON::Object obj1, obj2;
|
||||
obj1.set("payload", str1);
|
||||
obj2.set("payload", str2);
|
||||
std::ostringstream oss1, oss2;
|
||||
Poco::JSON::Stringifier::stringify(obj1, oss1);
|
||||
Poco::JSON::Stringifier::stringify(obj2, oss2);
|
||||
assert(oss1.str() == "{\"payload\":\"\\\r\"}");
|
||||
std::cout << "\"" << oss1.str() << "\"" << std::endl;
|
||||
assert(oss2.str() == "{\"payload\":\"\\\n\"}");
|
||||
|
||||
Object jObj(false);
|
||||
jObj.set("foo\\", 0);
|
||||
jObj.set("bar/", 0);
|
||||
jObj.set("baz", 0);
|
||||
jObj.set("q\"uote\"d", 0);
|
||||
jObj.set("backspace", "bs\b");
|
||||
jObj.set("newline", "nl\n");
|
||||
jObj.set("tab", "tb\t");
|
||||
|
||||
std::stringstream ss;
|
||||
jObj.stringify(ss);
|
||||
|
||||
assert(ss.str() == "{\"bar\\/\":0,\"baz\":0,\"foo\\\\\":0,\"q\\\"uote\\\"d\":0}");
|
||||
assert(ss.str() == "{\"backspace\":\"bs\\\b\",\"bar\\/\":0,\"baz\":0,\"foo\\\\\":0,"
|
||||
"\"newline\":\"nl\\\n\",\"q\\\"uote\\\"d\":0,\"tab\":\"tb\\\t\"}");
|
||||
|
||||
std::string json = "{ \"Simpsons\" : { \"husband\" : { \"name\" : \"Homer\" , \"age\" : 38 }, \"wife\" : { \"name\" : \"Marge\", \"age\" : 36 }, "
|
||||
"\"children\" : [ \"Bart\", \"Lisa\", \"Maggie\" ], "
|
||||
|
Loading…
x
Reference in New Issue
Block a user