diff options
author | Dominique Pelle <dominique.pelle@gmail.com> | 2022-01-12 15:24:40 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-01-12 15:24:40 +0000 |
commit | f5d639a8af719eb8ecb141b5c0890627e4d83134 (patch) | |
tree | 2890e8ac277b77edd6cb76464a54ff30af478d3f | |
parent | 5d9826973d9f4c6ffbb5648676bb628660c62906 (diff) | |
download | vim-git-f5d639a8af719eb8ecb141b5c0890627e4d83134.tar.gz |
patch 8.2.4070: using uninitialized memory when reading empty filev8.2.4070
Problem: Using uninitialized memory when reading empty file.
Solution: Check for empty file before checking for NL. (Dominique Pellé,
closes #9511)
-rw-r--r-- | src/filepath.c | 2 | ||||
-rw-r--r-- | src/testdir/test_eval_stuff.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/filepath.c b/src/filepath.c index eb5b8e050..add74b470 100644 --- a/src/filepath.c +++ b/src/filepath.c @@ -1796,7 +1796,7 @@ read_file_or_blob(typval_T *argvars, typval_T *rettv, int always_blob) p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary)); ++p) { - if (*p == '\n' || readlen <= 0) + if (readlen <= 0 || *p == '\n') { listitem_T *li; char_u *s = NULL; diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim index ac9589d24..ff6d695f6 100644 --- a/src/testdir/test_eval_stuff.vim +++ b/src/testdir/test_eval_stuff.vim @@ -93,6 +93,13 @@ func Test_readfile_binary() call delete('XReadfile_bin') endfunc +func Test_readfile_binary_empty() + call writefile([], 'Xempty-file') + " This used to compare uninitialized memory in Vim <= 8.2.4065 + call assert_equal([''], readfile('Xempty-file', 'b')) + call delete('Xempty-file') +endfunc + func Test_readfile_bom() call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom') call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom')) diff --git a/src/version.c b/src/version.c index a931516a9..8c77e2efb 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4070, +/**/ 4069, /**/ 4068, |