vim-patch:7.4.1643

Problem:    Terminating file name has side effects.
Solution:   Restore the character. (mostly by James McCoy, closes vim/vim#713)

d4caf5c16a
This commit is contained in:
James McCoy 2016-03-25 14:20:29 -04:00
parent 5f0c76b243
commit e4d1bf7177
3 changed files with 7 additions and 0 deletions

View File

@ -21994,8 +21994,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;
xfree(*bufp);
*bufp = *fnamep = p;
*fnamelen = STRLEN(p);

View File

@ -69,6 +69,7 @@ static char *features[] = {
// clang-format off
static int included_patches[] = {
1643,
1641,
1574,
1570,

View File

@ -44,6 +44,9 @@ describe('filename modifiers', function()
execute([=[Put fnamemodify('abc''%''def', ':S' )]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
execute([=[Put expand('%:r:S') == shellescape(expand('%:r'))]=])
execute([=[new foo.txt]=])
execute([=[Put join([expand('%:r'), expand('%:r:S'), expand('%')], ',')]=])
execute([=[quit]=])
execute([=[set shell=tcsh]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
execute([=[1 delete _]=])
@ -77,6 +80,7 @@ describe('filename modifiers', function()
fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
join([expand('%:r'), expand('%:r:S'), expand('%')], ',') 'foo,''foo'',foo.txt'
expand('%:r:S') == shellescape(expand('%:r')) 1
fnamemodify("abc\ndef", ':S' ) '''abc\^@def''']=])
end)