summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-10-26 22:04:04 +0200
committerBram Moolenaar <Bram@vim.org>2017-10-26 22:04:04 +0200
commit9ad89c6c4f89cd710d8244d8010b8b0ae30ba79d (patch)
tree47d4e016c05fa553fd36b0547029372a23475006
parentce11de87e26e1420703242f8e07b4fd69c4032ba (diff)
downloadvim-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.c3
-rw-r--r--src/popupmnu.c8
-rw-r--r--src/testdir/test_popup.vim37
-rw-r--r--src/version.c2
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,