summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-09-25 20:54:11 +0200
committerBram Moolenaar <Bram@vim.org>2016-09-25 20:54:11 +0200
commit680e015bfe19be6772d3bd754486fbd45c1a9d3b (patch)
tree1f786add42acb4835c366f0d5dc1cdddd53b6961 /src
parent3f1c15b24a3939d193c80c509132db9ee4d8cceb (diff)
downloadvim-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/Makefile1
-rw-r--r--src/fileio.c3
-rw-r--r--src/testdir/Make_all.mak1
-rw-r--r--src/testdir/test_crypt.vim42
-rw-r--r--src/version.c2
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,