aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval.c2
-rw-r--r--src/nvim/version.c1
-rw-r--r--test/functional/legacy/105_filename_modifiers_spec.lua2
3 files changed, 5 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index f71620a7b4..3856edbef9 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -21993,6 +21993,8 @@ repeat:
}
if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S') {
+ // vim_strsave_shellescape() needs a NUL terminated string.
+ (*fnamep)[*fnamelen] = NUL;
p = vim_strsave_shellescape(*fnamep, false, false);
xfree(*bufp);
*bufp = *fnamep = p;
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 98abb30b00..b7e5f1f2ef 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -69,6 +69,7 @@ static char *features[] = {
// clang-format off
static int included_patches[] = {
+ 1641,
1574,
1570,
1511,
diff --git a/test/functional/legacy/105_filename_modifiers_spec.lua b/test/functional/legacy/105_filename_modifiers_spec.lua
index 3413667022..5ce2024889 100644
--- a/test/functional/legacy/105_filename_modifiers_spec.lua
+++ b/test/functional/legacy/105_filename_modifiers_spec.lua
@@ -43,6 +43,7 @@ describe('filename modifiers', function()
execute([=[Put fnamemodify('abc'' ''def', ':S' )]=])
execute([=[Put fnamemodify('abc''%''def', ':S' )]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
+ execute([=[Put expand('%:r:S') == shellescape(expand('%:r'))]=])
execute([=[set shell=tcsh]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
execute([=[1 delete _]=])
@@ -76,6 +77,7 @@ describe('filename modifiers', function()
fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
+ expand('%:r:S') == shellescape(expand('%:r')) 1
fnamemodify("abc\ndef", ':S' ) '''abc\^@def''']=])
end)
end)