diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-03 22:15:26 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-03 22:15:26 +0100 |
commit | 631ebc48149a0446dd9ffbddd3e2822252085885 (patch) | |
tree | d98f3e6374369340184b20d42274c99951cb4aef /src | |
parent | e20b9ececa37a81c0340a78f61e57fa1bf46b06d (diff) | |
download | vim-git-631ebc48149a0446dd9ffbddd3e2822252085885.tar.gz |
patch 8.2.0204: crash when using winnr('j') in a popup windowv8.2.0204
Problem: Crash when using winnr('j') in a popup window.
Solution: Do not search for neighbors in a popup window. (closes #5568)
Diffstat (limited to 'src')
-rw-r--r-- | src/evalwindow.c | 4 | ||||
-rw-r--r-- | src/testdir/test_popupwin.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 10 |
4 files changed, 20 insertions, 3 deletions
diff --git a/src/evalwindow.c b/src/evalwindow.c index fb54033e5..be6762a5c 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -332,8 +332,6 @@ get_winnr(tabpage_T *tp, typval_T *argvar) else if (STRCMP(arg, "#") == 0) { twin = (tp == curtab) ? prevwin : tp->tp_prevwin; - if (twin == NULL) - nr = 0; } else { @@ -360,6 +358,8 @@ get_winnr(tabpage_T *tp, typval_T *argvar) else invalid_arg = TRUE; } + if (twin == NULL) + nr = 0; if (invalid_arg) { diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim index f8f501afa..ad5a80861 100644 --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -2400,9 +2400,14 @@ func Test_popupwin_terminal_buffer() let origwin = win_getid() let ptybuf = term_start(&shell, #{hidden: 1}) - let winnr = popup_create(ptybuf, #{minwidth: 40, minheight: 10}) + let winid = popup_create(ptybuf, #{minwidth: 40, minheight: 10}) " Wait for shell to start sleep 200m + " Check this doesn't crash + call assert_equal(winnr(), winnr('j')) + call assert_equal(winnr(), winnr('k')) + call assert_equal(winnr(), winnr('h')) + call assert_equal(winnr(), winnr('l')) " Cannot quit while job is running call assert_fails('call feedkeys("\<C-W>:quit\<CR>", "xt")', 'E948:') call feedkeys("exit\<CR>", 'xt') diff --git a/src/version.c b/src/version.c index 43a03fe49..c3dbec81d 100644 --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 204, +/**/ 203, /**/ 202, diff --git a/src/window.c b/src/window.c index 23037fe75..964f1ef6d 100644 --- a/src/window.c +++ b/src/window.c @@ -4431,6 +4431,11 @@ win_vert_neighbor(tabpage_T *tp, win_T *wp, int up, long count) frame_T *nfr; frame_T *foundfr; +#ifdef FEAT_PROP_POPUP + if (popup_is_popup(wp)) + // popups don't have neighbors. + return NULL; +#endif foundfr = wp->w_frame; while (count--) { @@ -4513,6 +4518,11 @@ win_horz_neighbor(tabpage_T *tp, win_T *wp, int left, long count) frame_T *nfr; frame_T *foundfr; +#ifdef FEAT_PROP_POPUP + if (popup_is_popup(wp)) + // popups don't have neighbors. + return NULL; +#endif foundfr = wp->w_frame; while (count--) { |