diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-09-25 20:54:11 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-09-25 20:54:11 +0200 |
commit | 680e015bfe19be6772d3bd754486fbd45c1a9d3b (patch) | |
tree | 1f786add42acb4835c366f0d5dc1cdddd53b6961 /src | |
parent | 3f1c15b24a3939d193c80c509132db9ee4d8cceb (diff) | |
download | vim-git-8.0.0010.tar.gz |
patch 8.0.0010v8.0.0010
Problem: Crash when editing file that starts with crypt yeader. (igor2x)
Solution: Check for length of text. (Christian Brabandt) Add a test.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 1 | ||||
-rw-r--r-- | src/fileio.c | 3 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_crypt.vim | 42 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 49 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile index 864f54b25..61c5919d0 100644 --- 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 \ diff --git a/src/fileio.c b/src/fileio.c index ea1f338f5..bcb8fef8b 100644 --- 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); diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 65ad3ee12..999f519ab 100644 --- 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 \ diff --git a/src/testdir/test_crypt.vim b/src/testdir/test_crypt.vim new file mode 100644 index 000000000..10979dd33 --- /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 diff --git a/src/version.c b/src/version.c index cf986e4c3..2a60f8b7b 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 10, +/**/ 9, /**/ 8, |