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
--- 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,