We'll assume that the input is valid UTF-8.
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);
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
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();
}