diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-25 18:42:46 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-25 18:42:46 +0100 |
commit | 52c6eaffd43a8c8865f8d6ed7cde0a8b137479e2 (patch) | |
tree | 264699b877dca19f40ff696e932b11ef9c1c610c | |
parent | da64ab322ae35e473a24b211d22d05b1439aa05c (diff) |
patch 7.4.1654v7.4.1654
Problem: Crash when using expand('%:S') in a buffer without a name.
Solution: Don't set a NUL. (James McCoy, closes #714)
-rw-r--r-- | src/eval.c | 6 | ||||
-rw-r--r-- | src/testdir/test_fnamemodify.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c index 770879661c..225658921c 100644 --- a/src/eval.c +++ b/src/eval.c @@ -26439,9 +26439,11 @@ repeat: { /* vim_strsave_shellescape() needs a NUL terminated string. */ c = (*fnamep)[*fnamelen]; - (*fnamep)[*fnamelen] = NUL; + if (c != NUL) + (*fnamep)[*fnamelen] = NUL; p = vim_strsave_shellescape(*fnamep, FALSE, FALSE); - (*fnamep)[*fnamelen] = c; + if (c != NUL) + (*fnamep)[*fnamelen] = c; if (p == NULL) return -1; vim_free(*bufp); diff --git a/src/testdir/test_fnamemodify.vim b/src/testdir/test_fnamemodify.vim index 902be40dcd..2267e18e3b 100644 --- a/src/testdir/test_fnamemodify.vim +++ b/src/testdir/test_fnamemodify.vim @@ -41,3 +41,9 @@ func Test_fnamemodify() call assert_equal("'abc\\\ndef'", fnamemodify("abc\ndef", ':S')) set shell& endfunc + +func Test_expand() + new + call assert_equal("", expand('%:S')) + quit +endfunc diff --git a/src/version.c b/src/version.c index 1e8c41964e..c1f6db6278 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1654, +/**/ 1653, /**/ 1652, |