aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-03-25 14:17:10 -0400
committerJames McCoy <jamessan@jamessan.com>2016-03-30 08:30:35 -0400
commit5f0c76b243aca8d5fcab15c24bf2b0ba33852155 (patch)
tree6b060737edf2481b93e674add7a8c0e23dc98a9b
parenta9e0d734d7b4aa6e6cd77e1834bbc7c6b59c716c (diff)
downloadrneovim-5f0c76b243aca8d5fcab15c24bf2b0ba33852155.tar.gz
rneovim-5f0c76b243aca8d5fcab15c24bf2b0ba33852155.tar.bz2
rneovim-5f0c76b243aca8d5fcab15c24bf2b0ba33852155.zip
vim-patch:7.4.1641
Problem: Using unterminated string. Solution: Add NUL before calling vim_strsave_shellescape(). (James McCoy) https://github.com/vim/vim/commit/5ca84ce4aa2832041f843e624c222bbc1f4d3e14
-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)