diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-05-17 17:47:07 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-05-17 17:47:07 +0100 |
commit | 4748c4bd64610cf943a431d215bb1aad51f8d0b4 (patch) | |
tree | a5e483daee891807be23aac8be24587a8da4b26f /src | |
parent | bd3a9d2c946bae0427d7c9b9249716064935fb4e (diff) | |
download | vim-git-4748c4bd64610cf943a431d215bb1aad51f8d0b4.tar.gz |
patch 8.2.4974: ":so" command may read after end of bufferv8.2.4974
Problem: ":so" command may read after end of buffer.
Solution: Compute length of text properly.
Diffstat (limited to 'src')
-rw-r--r-- | src/scriptfile.c | 3 | ||||
-rw-r--r-- | src/testdir/test_source.vim | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/scriptfile.c b/src/scriptfile.c index 03c733d35..f3a5783db 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1965,6 +1965,7 @@ get_one_sourceline(source_cookie_T *sp) break; buf = (char_u *)ga.ga_data; buf[ga.ga_len++] = NUL; + len = ga.ga_len; } else { @@ -1972,8 +1973,8 @@ get_one_sourceline(source_cookie_T *sp) if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len, sp->fp) == NULL) 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/src/testdir/test_source.vim b/src/testdir/test_source.vim index 5f45ab413..4736e9354 100644 --- a/src/testdir/test_source.vim +++ b/src/testdir/test_source.vim @@ -652,6 +652,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 diff --git a/src/version.c b/src/version.c index 68d11a2b0..98bb40d11 100644 --- 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 */ /**/ + 4974, +/**/ 4973, /**/ 4972, |