From: Bram Moolenaar Date: Fri, 25 Mar 2016 17:42:46 +0000 (+0100) Subject: patch 7.4.1654 X-Git-Tag: v7.4.1654 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=52c6eaffd43a8c8865f8d6ed7cde0a8b137479e2;p=vim patch 7.4.1654 Problem: Crash when using expand('%:S') in a buffer without a name. Solution: Don't set a NUL. (James McCoy, closes #714) --- diff --git a/src/eval.c b/src/eval.c index 770879661..225658921 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 902be40dc..2267e18e3 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 1e8c41964..c1f6db627 100644 --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1654, /**/ 1653, /**/