]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: json_append_escaped() doesn't need to escape the 8bit chars.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 28 Jan 2016 13:05:38 +0000 (15:05 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 28 Jan 2016 13:06:25 +0000 (15:06 +0200)
We'll assume that the input is valid UTF-8.

src/lib/json-parser.c
src/lib/json-parser.h
src/lib/test-json-parser.c

index ec6a10bb4d783fed7b33c5f8be263ecb07e7d180..53d7973261ce4b176d1bca19dcd46cafad5ba1ec 100644 (file)
@@ -658,7 +658,7 @@ void json_append_escaped(string_t *dest, const char *src)
                        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);
index 58b0dbb07d75b2d0a6e0bb1ac6d983d2d538b2c7..d78501d6a48f163f2fc65d23edb20efa237bce1d 100644 (file)
@@ -36,7 +36,7 @@ void json_parse_skip_next(struct json_parser *parser);
 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
index f75be2930b2e44aaa07003772c5b3a3634a715c1..8f2edb83774b9f88d7698cb81beb67f1c5bf690d 100644 (file)
@@ -163,8 +163,19 @@ static void test_json_parser_success(bool full_size)
        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();
 }