diff options
Diffstat (limited to 'contrib/libucl')
-rw-r--r-- | contrib/libucl/ucl_emitter_utils.c | 2 | ||||
-rw-r--r-- | contrib/libucl/ucl_util.c | 26 |
2 files changed, 24 insertions, 4 deletions
diff --git a/contrib/libucl/ucl_emitter_utils.c b/contrib/libucl/ucl_emitter_utils.c index 0831b3bf9..0447a53f7 100644 --- a/contrib/libucl/ucl_emitter_utils.c +++ b/contrib/libucl/ucl_emitter_utils.c @@ -125,7 +125,7 @@ ucl_elt_string_write_json (const char *str, size_t size, func->ucl_emitter_append_len ("\\f", 2, func->ud); break; case '\v': - func->ucl_emitter_append_len ("\\v", 2, func->ud); + func->ucl_emitter_append_len ("\\u000B", 6, func->ud); break; case '\\': func->ucl_emitter_append_len ("\\\\", 2, func->ud); diff --git a/contrib/libucl/ucl_util.c b/contrib/libucl/ucl_util.c index 95878109b..1a3b34293 100644 --- a/contrib/libucl/ucl_util.c +++ b/contrib/libucl/ucl_util.c @@ -2208,14 +2208,23 @@ ucl_object_fromstring_common (const char *str, size_t len, enum ucl_string_flags obj->type = UCL_STRING; if (flags & UCL_STRING_ESCAPE) { for (p = start, escaped_len = 0; p < end; p ++, escaped_len ++) { - if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE)) { - escaped_len ++; + if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE | UCL_CHARACTER_WHITESPACE_UNSAFE)) { + switch (*p) { + case '\v': + escaped_len += 5; + break; + case ' ': + break; + default: + escaped_len ++; + break; + } } } dst = malloc (escaped_len + 1); if (dst != NULL) { for (p = start, d = dst; p < end; p ++, d ++) { - if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE)) { + if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE | UCL_CHARACTER_WHITESPACE_UNSAFE)) { switch (*p) { case '\n': *d++ = '\\'; @@ -2237,10 +2246,21 @@ ucl_object_fromstring_common (const char *str, size_t len, enum ucl_string_flags *d++ = '\\'; *d = 'f'; break; + case '\v': + *d++ = '\\'; + *d++ = 'u'; + *d++ = '0'; + *d++ = '0'; + *d++ = '0'; + *d = 'B'; + break; case '\\': *d++ = '\\'; *d = '\\'; break; + case ' ': + *d = ' '; + break; case '"': *d++ = '\\'; *d = '"'; |