aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorMichael Ennen <mike.ennen@gmail.com>2016-10-23 17:38:28 -0700
committerMichael Ennen <mike.ennen@gmail.com>2016-10-23 22:55:22 -0700
commit6bc0d9b8c75b5bef61a951e56deb2b28f50182d8 (patch)
tree73c78cf426599fa3321b4f185eb3e19696d28b0c /src/nvim/eval.c
parentb5dfdf0669c4ee1293d558543d7d96a374ac2e1d (diff)
downloadrneovim-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.c10
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.