diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2016-02-21 15:21:53 -0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-02-21 15:21:53 -0500 |
commit | 81b68b0af3b3f01da40b966ef056bb53326a1b78 (patch) | |
tree | 7d02805f2e9ea7a77e5f7a78e9e6cbd3361899b7 | |
parent | 09e4c244ee665b51454830f7632f17096eabdab2 (diff) | |
parent | 693bf1dafb2ab07d972ed750d8e8f247ecf2db16 (diff) | |
download | rneovim-81b68b0af3b3f01da40b966ef056bb53326a1b78.tar.gz rneovim-81b68b0af3b3f01da40b966ef056bb53326a1b78.tar.bz2 rneovim-81b68b0af3b3f01da40b966ef056bb53326a1b78.zip |
Merge pull request #4247 from watiko/vim-7.4.903
vim-patch:7.4.{831,832,845,903}
-rw-r--r-- | src/nvim/os/env.c | 19 | ||||
-rw-r--r-- | src/nvim/path.c | 36 | ||||
-rw-r--r-- | src/nvim/version.c | 8 |
3 files changed, 42 insertions, 21 deletions
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c index c1804067e9..41ce8ddbc2 100644 --- a/src/nvim/os/env.c +++ b/src/nvim/os/env.c @@ -262,8 +262,25 @@ void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, bool esc, bool one, startstr_len = (int)STRLEN(startstr); src = skipwhite(srcp); - --dstlen; // leave one char space for "\," + dstlen--; // leave one char space for "\," while (*src && dstlen > 0) { + // Skip over `=expr`. + if (src[0] == '`' && src[1] == '=') { + var = src; + src += 2; + (void)skip_expr(&src); + if (*src == '`') { + src++; + } + size_t len = (size_t)(src - var); + if (len > (size_t)dstlen) { + len = (size_t)dstlen; + } + memcpy((char *)dst, (char *)var, len); + dst += len; + dstlen -= (int)len; + continue; + } copy_char = true; if ((*src == '$') || (*src == '~' && at_start)) { mustfree = false; diff --git a/src/nvim/path.c b/src/nvim/path.c index e0e5f19911..5cd93ab811 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -556,8 +556,9 @@ static size_t do_path_expand(garray_T *gap, const char_u *path, return 0; } - /* make room for file name */ - buf = xmalloc(STRLEN(path) + BASENAMELEN + 5); + // Make room for file name. When doing encoding conversion the actual + // length may be quite a bit longer, thus use the maximum possible length. + buf = xmalloc(MAXPATHL); /* * Find the first part in the path name that contains a wildcard. @@ -1158,12 +1159,17 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file, add_pat = -1; p = pat[i]; - if (vim_backtick(p)) + if (vim_backtick(p)) { add_pat = expand_backtick(&ga, p, flags); - else { - /* - * First expand environment variables, "~/" and "~user/". - */ + if (add_pat == -1) { + recursive = false; + FreeWild(ga.ga_len, (char_u **)ga.ga_data); + *num_file = 0; + *file = NULL; + return FAIL; + } + } else { + // First expand environment variables, "~/" and "~user/". if (has_env_var(p) || *p == '~') { p = expand_env_save_opt(p, true); if (p == NULL) @@ -1246,13 +1252,10 @@ static int vim_backtick(char_u *p) return *p == '`' && *(p + 1) != NUL && *(p + STRLEN(p) - 1) == '`'; } -/* - * Expand an item in `backticks` by executing it as a command. - * Currently only works when pat[] starts and ends with a `. - * Returns number of file names found. - */ -static int -expand_backtick ( +// Expand an item in `backticks` by executing it as a command. +// Currently only works when pat[] starts and ends with a `. +// Returns number of file names found, -1 if an error is encountered. +static int expand_backtick( garray_T *gap, char_u *pat, int flags /* EW_* flags */ @@ -1273,8 +1276,9 @@ expand_backtick ( buffer = get_cmd_output(cmd, NULL, (flags & EW_SILENT) ? kShellOptSilent : 0, NULL); xfree(cmd); - if (buffer == NULL) - return 0; + if (buffer == NULL) { + return -1; + } cmd = buffer; while (*cmd != NUL) { diff --git a/src/nvim/version.c b/src/nvim/version.c index 7d4b8982cd..fbace9ec93 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -387,7 +387,7 @@ static int included_patches[] = { // 906 NA // 905, // 904, - // 903, + 903, // 902 NA // 901, // 900 NA @@ -445,7 +445,7 @@ static int included_patches[] = { 848, 847, // 846 NA - // 845, + 845, 844, 843, // 842 NA @@ -458,8 +458,8 @@ static int included_patches[] = { 835, 834, 833, - // 832, - // 831, + 832, + 831, 830, // 829 NA 828, |