diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-04 17:44:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-04 17:44:51 +0800 |
commit | 9263f17d0d741f52e9fafae9779ddaa4e3441fcc (patch) | |
tree | 68312420dadcf7a1e47ceb2eb7d90ca6cb7b77de /src/nvim/mouse.c | |
parent | 823247a0407df806de0bd3ecd8bd151791e0951a (diff) | |
download | rneovim-9263f17d0d741f52e9fafae9779ddaa4e3441fcc.tar.gz rneovim-9263f17d0d741f52e9fafae9779ddaa4e3441fcc.tar.bz2 rneovim-9263f17d0d741f52e9fafae9779ddaa4e3441fcc.zip |
vim-patch:9.0.0259: crash with mouse click when not initialized (#21282)
Problem: Crash with mouse click when not initialized.
Solution: Check TabPageIdxs[] is not NULL.
https://github.com/vim/vim/commit/80525751c5ce9ed82c41d83faf9ef38667bf61b1
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'src/nvim/mouse.c')
-rw-r--r-- | src/nvim/mouse.c | 102 |
1 files changed, 52 insertions, 50 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c index 479ffde705..b4d6a533f1 100644 --- a/src/nvim/mouse.c +++ b/src/nvim/mouse.c @@ -467,66 +467,68 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent) start_visual.lnum = 0; - // Check for clicking in the tab page line. - if (mouse_grid <= 1 && mouse_row == 0 && firstwin->w_winrow > 0) { - if (is_drag) { - if (in_tab_line) { - move_tab_to_mouse(); + if (tab_page_click_defs != NULL) { // only when initialized + // Check for clicking in the tab page line. + if (mouse_grid <= 1 && mouse_row == 0 && firstwin->w_winrow > 0) { + if (is_drag) { + if (in_tab_line) { + move_tab_to_mouse(); + } + return false; } - return false; - } - // click in a tab selects that tab page - if (is_click && cmdwin_type == 0 && mouse_col < Columns) { - in_tab_line = true; - c1 = tab_page_click_defs[mouse_col].tabnr; - switch (tab_page_click_defs[mouse_col].type) { - case kStlClickDisabled: - break; - case kStlClickTabClose: { - tabpage_T *tp; + // click in a tab selects that tab page + if (is_click && cmdwin_type == 0 && mouse_col < Columns) { + in_tab_line = true; + c1 = tab_page_click_defs[mouse_col].tabnr; + switch (tab_page_click_defs[mouse_col].type) { + case kStlClickDisabled: + break; + case kStlClickTabClose: { + tabpage_T *tp; - // Close the current or specified tab page. - if (c1 == 999) { - tp = curtab; - } else { - tp = find_tabpage(c1); - } - if (tp == curtab) { - if (first_tabpage->tp_next != NULL) { - tabpage_close(false); + // Close the current or specified tab page. + if (c1 == 999) { + tp = curtab; + } else { + tp = find_tabpage(c1); } - } else if (tp != NULL) { - tabpage_close_other(tp, false); + if (tp == curtab) { + if (first_tabpage->tp_next != NULL) { + tabpage_close(false); + } + } else if (tp != NULL) { + tabpage_close_other(tp, false); + } + break; } - break; - } - case kStlClickTabSwitch: - if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) { - // double click opens new page - end_visual_mode(); - tabpage_new(); - tabpage_move(c1 == 0 ? 9999 : c1 - 1); - } else { - // Go to specified tab page, or next one if not clicking - // on a label. - goto_tabpage(c1); - - // It's like clicking on the status line of a window. - if (curwin != old_curwin) { + case kStlClickTabSwitch: + if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) { + // double click opens new page end_visual_mode(); + tabpage_new(); + tabpage_move(c1 == 0 ? 9999 : c1 - 1); + } else { + // Go to specified tab page, or next one if not clicking + // on a label. + goto_tabpage(c1); + + // It's like clicking on the status line of a window. + if (curwin != old_curwin) { + end_visual_mode(); + } } + break; + case kStlClickFuncRun: + call_click_def_func(tab_page_click_defs, mouse_col, which_button); + break; } - break; - case kStlClickFuncRun: - call_click_def_func(tab_page_click_defs, mouse_col, which_button); - break; } + return true; + } else if (is_drag && in_tab_line) { + move_tab_to_mouse(); + return false; } - return true; - } else if (is_drag && in_tab_line) { - move_tab_to_mouse(); - return false; } // When 'mousemodel' is "popup" or "popup_setpos", translate mouse events: |