From bf0d9ff5b2ce6cde02b230ebe1b47fbb4777925f Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 9 Jun 2015 21:13:50 +0200 Subject: Fix quoting of special characters in JSON --- src/json.cc | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/json.cc b/src/json.cc index d37cba0..fc60ade 100644 --- a/src/json.cc +++ b/src/json.cc @@ -304,10 +304,30 @@ std::ostream& quoted(std::ostream& os, const std::string& str) { os << '"'; size_t last = 0; for (size_t i = 0; i < str.size(); ++i) { - if (str[i] == '"' || str[i] == '\\') { + switch (str[i]) { + case '"': + case '\\': os << str.substr(last, i - last); os << '\\'; last = i; + break; + case '\n': + case '\r': + case '\t': + os << str.substr(last, i - last); + switch (str[i]) { + case '\n': + os << "\\n"; + break; + case '\r': + os << "\\r"; + break; + case '\t': + os << "\\t"; + break; + } + last = i + 1; + break; } } os << str.substr(last); -- cgit v1.2.3-70-g09d2