From: Bram Moolenaar Date: Tue, 29 Mar 2022 18:52:12 +0000 (+0100) Subject: patch 8.2.4647: "source" can read past end of copied line X-Git-Tag: v8.2.4647 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2bdad6126778f907c0b98002bfebf0e611a3f5db;p=vim patch 8.2.4647: "source" can read past end of copied line Problem: "source" can read past end of copied line. Solution: Add a terminating NUL. --- diff --git a/src/scriptfile.c b/src/scriptfile.c index a334b2f9f..39936a426 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1918,7 +1918,10 @@ get_one_sourceline(source_cookie_T *sp) break; // all the lines are processed ga_concat(&ga, ((char_u **)sp->buflines.ga_data)[sp->buf_lnum]); sp->buf_lnum++; + if (ga_grow(&ga, 1) == FAIL) + break; buf = (char_u *)ga.ga_data; + buf[ga.ga_len++] = NUL; } else { diff --git a/src/testdir/test_source.vim b/src/testdir/test_source.vim index 35d145374..5f45ab413 100644 --- a/src/testdir/test_source.vim +++ b/src/testdir/test_source.vim @@ -646,4 +646,13 @@ func Test_source_buffer_vim9() %bw! endfunc +func Test_source_buffer_long_line() + " This was reading past the end of the line. + new + norm300gr0 + so + bwipe! +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 14fd1c369..b18de4c5e 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4647, /**/ 4646, /**/