# HG changeset patch # User Bram Moolenaar # Date 1590441303 -7200 # Node ID 193c0446cf28025e4ebad239d4c202b92c547f30 # Parent ca1354820ef2de61254ddf059990916c91775702 patch 8.2.0824: still not enough memory allocated when converting string Commit: https://github.com/vim/vim/commit/1919371b2b9ddb1a645f40b59adbd89317530882 Author: Bram Moolenaar Date: Mon May 25 23:01:42 2020 +0200 patch 8.2.0824: still not enough memory allocated when converting string Problem: Still not enough memory allocated when converting string with special character. Solution: Reserve space for expanding K_SPECIAL. (closes #6130) diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -3515,10 +3515,11 @@ get_string_tv(char_u **arg, typval_T *re { ++p; // A "\" form occupies at least 4 characters, and produces up - // to 9 characters (6 for the char and 3 for a modifier): reserve - // space for 5 extra. + // to 21 characters (3 * 6 for the char and 3 for a modifier): + // reserve space for 18 extra. + // Each byte in the char could be encoded as K_SPECIAL K_EXTRA x. if (*p == '<') - extra += 5; + extra += 18; } } diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -2280,6 +2280,7 @@ func Test_nr2char() call assert_equal('a', nr2char(97, 0)) call assert_equal("\x80\xfc\b\xf4\x80\xfeX\x80\xfeX\x80\xfeX", eval('"\"')) + call assert_equal("\x80\xfc\b\xfd\x80\xfeX\x80\xfeX\x80\xfeX\x80\xfeX\x80\xfeX", eval('"\"')) endfunc " Test for screenattr(), screenchar() and screenchars() functions diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 824, +/**/ 823, /**/ 822,