Mercurial > vim
changeset 10221:fb1fde4fcff7 v8.0.0010
commit https://github.com/vim/vim/commit/680e015bfe19be6772d3bd754486fbd45c1a9d3b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Sep 25 20:54:11 2016 +0200
patch 8.0.0010
Problem: Crash when editing file that starts with crypt yeader. (igor2x)
Solution: Check for length of text. (Christian Brabandt) Add a test.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 25 Sep 2016 21:00:04 +0200 |
parents | 168cad9ba374 |
children | 725e6603d33a |
files | src/Makefile src/fileio.c src/testdir/Make_all.mak src/testdir/test_crypt.vim src/version.c |
diffstat | 5 files changed, 49 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Makefile +++ b/src/Makefile @@ -2066,6 +2066,7 @@ test_arglist \ test_channel \ test_charsearch \ test_cmdline \ + test_crypt \ test_cscope \ test_cursor_func \ test_delete \
--- a/src/fileio.c +++ b/src/fileio.c @@ -3011,6 +3011,9 @@ check_for_cryptkey( /* Remove cryptmethod specific header from the text. */ header_len = crypt_get_header_len(method); + if (*sizep <= header_len) + /* invalid header, buffer can't be encrypted */ + return NULL; *filesizep += header_len; *sizep -= header_len; mch_memmove(ptr, ptr + header_len, (size_t)*sizep);
--- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -149,6 +149,7 @@ NEW_TESTS = test_arglist.res \ test_channel.res \ test_charsearch.res \ test_cmdline.res \ + test_crypt.res \ test_cscope.res \ test_diffmode.res \ test_digraph.res \
new file mode 100644 --- /dev/null +++ b/src/testdir/test_crypt.vim @@ -0,0 +1,42 @@ +" Tests for encryption. +" TODO: include tests from test71. + +func Common_head_only(text) + " This was crashing Vim + split Xtest.txt + call setline(1, a:text) + wq + call feedkeys(":split Xtest.txt\<CR>foobar\<CR>", "tx") + call delete('Xtest.txt') + call assert_match('VimCrypt', getline(1)) + bwipe! +endfunc + +func Test_head_only_2() + call Common_head_only('VimCrypt~02!abc') +endfunc + +func Test_head_only_3() + call Common_head_only('VimCrypt~03!abc') +endfunc +" Tests for encryption. +" TODO: include tests from test71. + +func Common_head_only(text) + " This was crashing Vim + split Xtest.txt + call setline(1, a:text) + wq + call feedkeys(":split Xtest.txt\<CR>foobar\<CR>", "tx") + call delete('Xtest.txt') + call assert_match('VimCrypt', getline(1)) + bwipe! +endfunc + +func Test_head_only_2() + call Common_head_only('VimCrypt~02!abc') +endfunc + +func Test_head_only_3() + call Common_head_only('VimCrypt~03!abc') +endfunc