# HG changeset patch # User Christian Brabandt # Date 1474830004 -7200 # Node ID fb1fde4fcff7dddab826718432ebd13131152023 # Parent 168cad9ba3741a1ab4377c46768e9a04787a8046 commit https://github.com/vim/vim/commit/680e015bfe19be6772d3bd754486fbd45c1a9d3b Author: Bram Moolenaar 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. diff --git a/src/Makefile b/src/Makefile --- 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 --- 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 --- 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 --- /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\foobar\", "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\foobar\", "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 --- 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,