From 9cb5cb7a0cdbcf2cecbcd091fec580bac8587d35 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 5 Feb 2014 21:51:22 +0100 Subject: [PATCH] Proper JSON escaping --- urbackupserver/serverinterface/json.cpp | 20 ++++++++++---------- urbackupserver/serverinterface/json.h | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/urbackupserver/serverinterface/json.cpp b/urbackupserver/serverinterface/json.cpp index 0849fdff..62bffb9d 100644 --- a/urbackupserver/serverinterface/json.cpp +++ b/urbackupserver/serverinterface/json.cpp @@ -331,35 +331,35 @@ namespace JSON return *this; } - std::string Value::escape(const std::string &t) + std::wstring Value::escape(const std::wstring &t) { - std::string r; + std::wstring r; for(size_t i=0;i(t[i])); if(hex.size()<2) { hex="0"+hex; } - r+="\\x"+hex; + r+=L"\\u00"+widen(hex); } else { @@ -373,8 +373,8 @@ namespace JSON { switch(data_type) { - case str_type: return "\""+escape(*((std::string*)data))+"\""; - case wstr_type: return "\""+escape(Server->ConvertToUTF8(*((std::wstring*)data)))+"\""; + case str_type: return "\""+Server->ConvertToUTF8(escape(Server->ConvertToUnicode(*((std::string*)data))))+"\""; + case wstr_type: return "\""+Server->ConvertToUTF8(escape(*((std::wstring*)data)))+"\""; case obj_type: return ((Object*)data)->get(compressed); case array_type: return ((Array*)data)->get(compressed); case bool_type: return nconvert(*((bool*)data)); diff --git a/urbackupserver/serverinterface/json.h b/urbackupserver/serverinterface/json.h index f0f5ac62..d2cf9f1a 100644 --- a/urbackupserver/serverinterface/json.h +++ b/urbackupserver/serverinterface/json.h @@ -120,7 +120,7 @@ namespace JSON void init(const wchar_t* val); void init(long unsigned int val); - std::string escape(const std::string &t); + std::wstring escape(const std::wstring &t); void *data; Value_type data_type;