changeset 19656:5cc83e9cbfee

lib: json_append_escaped() doesn't need to escape the 8bit chars. We'll assume that the input is valid UTF-8.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 28 Jan 2016 15:05:38 +0200
parents 5bdb2be321ba
children ea87c511c6c8
files src/lib/json-parser.c src/lib/json-parser.h src/lib/test-json-parser.c
diffstat 3 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/json-parser.c	Thu Jan 28 13:45:48 2016 +0200
+++ b/src/lib/json-parser.c	Thu Jan 28 15:05:38 2016 +0200
@@ -658,7 +658,7 @@
 			str_append(dest, "\\\\");
 			break;
 		default:
-			if (*src < 32)
+			if ((unsigned char)*src < 32)
 				str_printfa(dest, "\\u%04x", *src);
 			else
 				str_append_c(dest, *src);
--- a/src/lib/json-parser.h	Thu Jan 28 13:45:48 2016 +0200
+++ b/src/lib/json-parser.h	Thu Jan 28 15:05:38 2016 +0200
@@ -36,7 +36,7 @@
 int json_parse_next_stream(struct json_parser *parser,
 			   struct istream **input_r);
 
-/* Append data to already opened JSON string. */
+/* Append data to already opened JSON string. src should be valid UTF-8 data. */
 void json_append_escaped(string_t *dest, const char *src);
 
 #endif
--- a/src/lib/test-json-parser.c	Thu Jan 28 13:45:48 2016 +0200
+++ b/src/lib/test-json-parser.c	Thu Jan 28 15:05:38 2016 +0200
@@ -163,8 +163,19 @@
 	test_end();
 }
 
+static void test_json_append_escaped(void)
+{
+	string_t *str = t_str_new(32);
+
+	test_begin("json_append_escaped()");
+	json_append_escaped(str, "\b\f\r\n\t\"\\\001\002-\xC3\xA4");
+	test_assert(strcmp(str_c(str), "\\b\\f\\r\\n\\t\\\"\\\\\\u0001\\u0002-\xC3\xA4") == 0);
+	test_end();
+}
+
 void test_json_parser(void)
 {
 	test_json_parser_success(TRUE);
 	test_json_parser_success(FALSE);
+	test_json_append_escaped();
 }