diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-10-26 22:04:04 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-10-26 22:04:04 +0200 |
commit | 9ad89c6c4f89cd710d8244d8010b8b0ae30ba79d (patch) | |
tree | 47d4e016c05fa553fd36b0547029372a23475006 | |
parent | ce11de87e26e1420703242f8e07b4fd69c4032ba (diff) | |
download | vim-git-9ad89c6c4f89cd710d8244d8010b8b0ae30ba79d.tar.gz |
patch 8.0.1223: crash when using autocomplete and tab pagesv8.0.1223
Problem: Crash when using autocomplete and tab pages.
Solution: Check if the current tab changed. (Christian Brabandt, closes
#2239)
-rw-r--r-- | src/misc1.c | 3 | ||||
-rw-r--r-- | src/popupmnu.c | 8 | ||||
-rw-r--r-- | src/testdir/test_popup.vim | 37 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 48 insertions, 2 deletions
diff --git a/src/misc1.c b/src/misc1.c index f7789ff79..eb893f6ee 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -2313,7 +2313,8 @@ ins_char_bytes(char_u *buf, int charlen) /* Copy bytes after the changed character(s). */ p = newp + col; - mch_memmove(p + newlen, oldp + col + oldlen, + if (linelen > col + oldlen) + mch_memmove(p + newlen, oldp + col + oldlen, (size_t)(linelen - col - oldlen)); /* Insert or overwrite the new character. */ diff --git a/src/popupmnu.c b/src/popupmnu.c index 418f0ca61..ec75281e7 100644 --- a/src/popupmnu.c +++ b/src/popupmnu.c @@ -566,6 +566,7 @@ pum_set_selected(int n, int repeat) && vim_strchr(p_cot, 'p') != NULL) { win_T *curwin_save = curwin; + tabpage_T *curtab_save = curtab; int res = OK; /* Open a preview window. 3 lines by default. Prefer @@ -653,8 +654,13 @@ pum_set_selected(int n, int repeat) curwin->w_cursor.lnum = 1; curwin->w_cursor.col = 0; - if (curwin != curwin_save && win_valid(curwin_save)) + if ((curwin != curwin_save && win_valid(curwin_save)) + || (curtab != curtab_save + && valid_tabpage(curtab_save))) { + if (curtab != curtab_save && valid_tabpage(curtab_save)) + goto_tabpage_tp(curtab_save, FALSE, FALSE); + /* When the first completion is done and the preview * window is not resized, skip the preview window's * status line redrawing. */ diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index b770e560d..ac8f62e8a 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -661,4 +661,41 @@ func Test_popup_and_window_resize() bwipe! endfunc +func Test_popup_and_preview_autocommand() + " This used to crash Vim + if !has('python') + return + endif + let h = winheight(0) + if h < 15 + return + endif + new + augroup MyBufAdd + au! + au BufAdd * nested tab sball + augroup END + set omnifunc=pythoncomplete#Complete + call setline(1, 'import os') + " make the line long + call setline(2, ' os.') + $ + call feedkeys("A\<C-X>\<C-O>\<C-N>\<C-N>\<C-N>\<enter>\<esc>", 'tx') + call assert_equal(["import os", " os.EX_IOERR", ''], getline(1,'$')) + call assert_equal(1, winnr('$')) + " previewwindow option is not set + call assert_equal(0, &previewwindow) + norm! gt + call assert_equal(0, &previewwindow) + norm! gT + call assert_equal(12, tabpagenr('$')) + tabonly + pclose + augroup MyBufAdd + au! + augroup END + augroup! MyBufAdd + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 1cb437b21..6ccb6103b 100644 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1223, +/**/ 1222, /**/ 1221, |