neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit b66f395ff444643852e3539b849267658e885bf4
parent 4e25b1a675976ed238752d547dc05aaaef38af29
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Wed, 24 Apr 2024 19:54:02 +0800

vim-patch:8.2.4974: ":so" command may read after end of buffer

Problem:    ":so" command may read after end of buffer.
Solution:   Compute length of text properly.

https://github.com/vim/vim/commit/4748c4bd64610cf943a431d215bb1aad51f8d0b4

Co-authored-by: Bram Moolenaar <Bram@vim.org>

Diffstat:
Msrc/nvim/runtime.c | 3++-
Mtest/old/testdir/test_source.vim | 11+++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/nvim/runtime.c b/src/nvim/runtime.c @@ -2726,6 +2726,7 @@ static char *get_one_sourceline(source_cookie_T *sp) ga_grow(&ga, 1); buf = (char *)ga.ga_data; buf[ga.ga_len++] = NUL; + len = ga.ga_len; } else { buf = ga.ga_data; retry: @@ -2736,8 +2737,8 @@ retry: } break; } + len = ga.ga_len + (int)strlen(buf + ga.ga_len); } - len = ga.ga_len + (int)strlen(buf + ga.ga_len); #ifdef USE_CRNL // Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the // CTRL-Z by its own, or after a NL. diff --git a/test/old/testdir/test_source.vim b/test/old/testdir/test_source.vim @@ -644,6 +644,17 @@ func Test_source_buffer_long_line() norm300gr0 so bwipe! + + let lines =<< trim END + new + norm 10a0000000000ΓΈ00000000000 + norm i0000000000000000000 + silent! so + END + call writefile(lines, 'Xtest.vim') + source Xtest.vim + bwipe! + call delete('Xtest.vim') endfunc