patch 8.2.3850: illegal memory access when displaying a partial
Problem: Illegal memory access when displaying a partial.
Solution: Terminate the string with a NUL. (closes #9371)
diff --git a/src/eval.c b/src/eval.c
index ecc242d..d0ad7c6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5087,7 +5087,8 @@
ga_concat(&ga, tv2string(&dtv, &tf, numbuf, copyID));
vim_free(tf);
}
- ga_concat(&ga, (char_u *)")");
+ // terminate with ')' and a NUL
+ ga_concat_len(&ga, (char_u *)")", 2);
*tofree = ga.ga_data;
r = *tofree;
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 375cb01..5724eb6 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -337,4 +337,11 @@
call delete('Xtest_quit_message')
endfunc
+" this was missing a terminating NUL
+func Test_echo_string_partial()
+ function CountSpaces()
+ endfunction
+ echomsg function('CountSpaces', [#{aaaaaaaaaaa: v:false, bbbbbbbbbbbb: '', ccccccccccc: ['ab', 'cd']}])
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 372b760..5272a5b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3850,
+/**/
3849,
/**/
3848,