aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorwatiko <service@mail.watiko.net>2016-02-12 22:59:34 +0900
committerwatiko <service@mail.watiko.net>2016-02-21 22:06:39 +0900
commit6ea1047585664608cb42e007ba87ad86109ae3f8 (patch)
tree03907b6f3bfad40394d468ea22279bca9ea71983 /src
parentc8561ecf268c498b41eb36c18f3eda1557b7bdc1 (diff)
downloadrneovim-6ea1047585664608cb42e007ba87ad86109ae3f8.tar.gz
rneovim-6ea1047585664608cb42e007ba87ad86109ae3f8.tar.bz2
rneovim-6ea1047585664608cb42e007ba87ad86109ae3f8.zip
vim-patch:7.4.832
Problem: $HOME in `=$HOME . '/.vimrc'` is expanded too early. Solution: Skip over `=expr` when expanding environment names. https://github.com/vim/vim/commit/be83b73ddb2ee8297037166d243f72e3423a3ce3 --- To reproduce: ```sh nvim -u NONE -c 'e `=$HOME . "/.vimrc"`' ```
Diffstat (limited to 'src')
-rw-r--r--src/nvim/os/env.c19
-rw-r--r--src/nvim/version.c2
2 files changed, 19 insertions, 2 deletions
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index c1804067e9..ea0e992fe2 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 -= len;
+ continue;
+ }
copy_char = true;
if ((*src == '$') || (*src == '~' && at_start)) {
mustfree = false;
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 6fdad105e4..7f400773b0 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -458,7 +458,7 @@ static int included_patches[] = {
835,
834,
833,
- // 832,
+ 832,
831,
830,
// 829 NA