diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-09-18 21:38:51 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-09-19 10:57:57 -0400 |
commit | d3e0d299192b7db07445db2fcdcbe089e1cf08f1 (patch) | |
tree | 3ee6609a7b96415ff2758278dc7d699464c30571 | |
parent | ccfb69ab3676bca927744bae2f7462a6464fe4ce (diff) | |
download | rneovim-d3e0d299192b7db07445db2fcdcbe089e1cf08f1.tar.gz rneovim-d3e0d299192b7db07445db2fcdcbe089e1cf08f1.tar.bz2 rneovim-d3e0d299192b7db07445db2fcdcbe089e1cf08f1.zip |
vim-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 vim/vim#6130)
https://github.com/vim/vim/commit/1919371b2b9ddb1a645f40b59adbd89317530882
-rw-r--r-- | src/nvim/eval.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_functions.vim | 1 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index f3b6818464..00542e3766 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -4527,10 +4527,11 @@ static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate) if (*p == '\\' && p[1] != NUL) { p++; // A "\<x>" 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/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim index c8140d1c52..c29e0410a9 100644 --- a/src/nvim/testdir/test_functions.vim +++ b/src/nvim/testdir/test_functions.vim @@ -1374,6 +1374,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('"\<M-' .. nr2char(0x100000) .. '>"')) + call assert_equal("\x80\xfc\b\xfd\x80\xfeX\x80\xfeX\x80\xfeX\x80\xfeX\x80\xfeX", eval('"\<M-' .. nr2char(0x40000000) .. '>"')) endfunc " vim: shiftwidth=2 sts=2 expandtab |