diff options
author | Michael Ennen <mike.ennen@gmail.com> | 2016-10-23 17:38:28 -0700 |
---|---|---|
committer | Michael Ennen <mike.ennen@gmail.com> | 2016-10-23 22:55:22 -0700 |
commit | 6bc0d9b8c75b5bef61a951e56deb2b28f50182d8 (patch) | |
tree | 73c78cf426599fa3321b4f185eb3e19696d28b0c /src/nvim/eval.c | |
parent | b5dfdf0669c4ee1293d558543d7d96a374ac2e1d (diff) | |
download | rneovim-6bc0d9b8c75b5bef61a951e56deb2b28f50182d8.tar.gz rneovim-6bc0d9b8c75b5bef61a951e56deb2b28f50182d8.tar.bz2 rneovim-6bc0d9b8c75b5bef61a951e56deb2b28f50182d8.zip |
vim-patch:7.4.1779
Problem: Using negative index in strcharpart(). (Yegappan Lakshmanan)
Solution: Assume single byte when using a negative iindex.
https://github.com/vim/vim/commit/73dfe917ba6357413aaf98a021c91add5ac6e9bc
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 9fc5256a7e..a9079c5519 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -15772,8 +15772,14 @@ static void f_strcharpart(typval_T *argvars, typval_T *rettv, FunPtr fptr) { if (argvars[2].v_type != VAR_UNKNOWN) { charlen = get_tv_number(&argvars[2]); while (charlen > 0 && nbyte + len < slen) { - len += mb_char2len(p[nbyte + len]); - charlen--; + int off = nbyte + len; + + if (off < 0) { + len += 1; + } else { + len += mb_char2len(p[off]); + charlen--; + } } } else { len = slen - nbyte; // default: all bytes that are available. |