From: Bram Moolenaar Date: Fri, 12 Apr 2019 19:19:04 +0000 (+0200) Subject: patch 8.1.1158: json encoded string is sometimes missing the final NUL X-Git-Tag: v8.1.1158 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=04af19637c14045fa33b99576de4eea1e3524edb;p=vim patch 8.1.1158: json encoded string is sometimes missing the final NUL Problem: Json encoded string is sometimes missing the final NUL. Solution: Add the NUL. Also for log messages. --- diff --git a/src/channel.c b/src/channel.c index 9ce47d3a4..dd47c5b02 100644 --- a/src/channel.c +++ b/src/channel.c @@ -5877,6 +5877,7 @@ job_start( ga_concat(&ga, (char_u *)" "); ga_concat(&ga, (char_u *)argv[i]); } + ga_append(&ga, NUL); ch_log(NULL, "Starting job: %s", (char *)ga.ga_data); ga_clear(&ga); } diff --git a/src/json.c b/src/json.c index d3c4817be..9fb6af0de 100644 --- a/src/json.c +++ b/src/json.c @@ -51,6 +51,7 @@ json_encode(typval_T *val, int options) /* Store bytes in the growarray. */ ga_init2(&ga, 1, 4000); json_encode_gap(&ga, val, options); + ga_append(&ga, NUL); return ga.ga_data; } @@ -82,6 +83,7 @@ json_encode_nr_expr(int nr, typval_T *val, int options) if (json_encode_gap(&ga, &listtv, options) == OK && (options & JSON_NL)) ga_append(&ga, '\n'); list_unref(listtv.vval.v_list); + ga_append(&ga, NUL); return ga.ga_data; } #endif diff --git a/src/testdir/test_json.vim b/src/testdir/test_json.vim index fb3d9927e..e16a7f030 100644 --- a/src/testdir/test_json.vim +++ b/src/testdir/test_json.vim @@ -289,3 +289,10 @@ func Test_js_decode() call assert_equal(s:varl5, js_decode(s:jsl5)) endfunc + +func Test_json_encode_long() + " The growarray uses a grow size of 4000, check that a result that is exactly + " 4000 bytes long is not missing the final NUL. + let json = json_encode([repeat('a', 3996)]) + call assert_equal(4000, len(json)) +endfunc diff --git a/src/version.c b/src/version.c index 4daa41e24..7e5d406ef 100644 --- a/src/version.c +++ b/src/version.c @@ -771,6 +771,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1158, /**/ 1157, /**/