Mercurial > vim
changeset 8708:31f9fa8e1532 v7.4.1643
commit https://github.com/vim/vim/commit/d4caf5c16a9f1c9477d426e58d8d3dc47ab5f066
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Mar 24 19:14:35 2016 +0100
patch 7.4.1643
Problem: Terminating file name has side effects.
Solution: Restore the character. (mostly by James McCoy, closes https://github.com/vim/vim/issues/713)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 24 Mar 2016 19:15:09 +0100 |
parents | dffcd5b20b98 |
children | 0e13fb6f07f4 |
files | src/eval.c src/testdir/test105.in src/testdir/test105.ok src/version.c |
diffstat | 4 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -26440,8 +26440,10 @@ repeat: if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S') { /* vim_strsave_shellescape() needs a NUL terminated string. */ + c = (*fnamep)[*fnamelen]; (*fnamep)[*fnamelen] = NUL; p = vim_strsave_shellescape(*fnamep, FALSE, FALSE); + (*fnamep)[*fnamelen] = c; if (p == NULL) return -1; vim_free(*bufp);
--- a/src/testdir/test105.in +++ b/src/testdir/test105.in @@ -36,6 +36,7 @@ STARTTEST :Put fnamemodify('abc''%''def', ':S' ) :Put fnamemodify("abc\ndef", ':S' ) :Put expand('%:r:S') == shellescape(expand('%:r')) +:Put join([expand('%:r'), expand('%:r:S'), expand('%')], ',') :set shell=tcsh :Put fnamemodify("abc\ndef", ':S' ) :$put ='vim: ts=8'
--- a/src/testdir/test105.ok +++ b/src/testdir/test105.ok @@ -26,5 +26,6 @@ fnamemodify('abc'' ''def', ':S' fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def''' fnamemodify("abc\ndef", ':S' ) '''abc^@def''' expand('%:r:S') == shellescape(expand('%:r')) 1 +join([expand('%:r'), expand('%:r:S'), expand('%')], ',') 'test105,''test105'',test105.in' fnamemodify("abc\ndef", ':S' ) '''abc\^@def''' vim: ts=8