diff options
author | watiko <service@mail.watiko.net> | 2016-02-12 22:59:34 +0900 |
---|---|---|
committer | watiko <service@mail.watiko.net> | 2016-02-21 22:06:39 +0900 |
commit | 6ea1047585664608cb42e007ba87ad86109ae3f8 (patch) | |
tree | 03907b6f3bfad40394d468ea22279bca9ea71983 /src | |
parent | c8561ecf268c498b41eb36c18f3eda1557b7bdc1 (diff) | |
download | rneovim-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.c | 19 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
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 |