To: vim_dev@googlegroups.com Subject: Patch 9.0.0259 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0259 Problem: Crash with mouse click when not initialized. Solution: Check TabPageIdxs[] is not NULL. Files: src/mouse.c, src/testdir/test_tabline.vim *** ../vim-9.0.0258/src/mouse.c 2022-08-14 14:16:07.995582211 +0100 --- src/mouse.c 2022-08-24 19:26:29.221604345 +0100 *************** *** 471,544 **** start_visual.lnum = 0; ! // Check for clicking in the tab page line. ! if (mouse_row == 0 && firstwin->w_winrow > 0) { ! if (is_drag) { ! if (in_tab_line) { ! c1 = TabPageIdxs[mouse_col]; ! tabpage_move(c1 <= 0 ? 9999 : c1 < tabpage_index(curtab) ! ? c1 - 1 : c1); } - return FALSE; - } ! // click in a tab selects that tab page ! if (is_click # ifdef FEAT_CMDWIN ! && cmdwin_type == 0 # endif ! && mouse_col < Columns) ! { ! in_tab_line = TRUE; ! c1 = TabPageIdxs[mouse_col]; ! if (c1 >= 0) { ! if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) ! { ! // double click opens new page ! end_visual_mode_keep_button(); ! 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_keep_button(); } - } - else - { - 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); } - else if (tp != NULL) - tabpage_close_other(tp, FALSE); } } - return TRUE; - } - else if (is_drag && in_tab_line) - { - c1 = TabPageIdxs[mouse_col]; - tabpage_move(c1 <= 0 ? 9999 : c1 - 1); - return FALSE; } // When 'mousemodel' is "popup" or "popup_setpos", translate mouse events: --- 471,547 ---- start_visual.lnum = 0; ! if (TabPageIdxs != NULL) // only when initialized { ! // Check for clicking in the tab page line. ! if (mouse_row == 0 && firstwin->w_winrow > 0) { ! if (is_drag) { ! if (in_tab_line) ! { ! c1 = TabPageIdxs[mouse_col]; ! tabpage_move(c1 <= 0 ? 9999 : c1 < tabpage_index(curtab) ! ? c1 - 1 : c1); ! } ! return FALSE; } ! // click in a tab selects that tab page ! if (is_click # ifdef FEAT_CMDWIN ! && cmdwin_type == 0 # endif ! && mouse_col < Columns) { ! in_tab_line = TRUE; ! c1 = TabPageIdxs[mouse_col]; ! if (c1 >= 0) { ! if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) ! { ! // double click opens new page end_visual_mode_keep_button(); + 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_keep_button(); + } } else { ! 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); ! } ! else if (tp != NULL) ! tabpage_close_other(tp, FALSE); } } + return TRUE; + } + else if (is_drag && in_tab_line) + { + c1 = TabPageIdxs[mouse_col]; + tabpage_move(c1 <= 0 ? 9999 : c1 - 1); + return FALSE; } } // When 'mousemodel' is "popup" or "popup_setpos", translate mouse events: *** ../vim-9.0.0258/src/testdir/test_tabline.vim 2022-02-19 11:31:34.000000000 +0000 --- src/testdir/test_tabline.vim 2022-08-24 19:25:09.194773256 +0100 *************** *** 147,150 **** --- 147,164 ---- set showtabline& tabline& endfunc + func Test_mouse_click_in_tab() + " This used to crash because TabPageIdxs[] was not initialized + let lines =<< trim END + tabnew + set mouse=a + exe "norm \" + END + call writefile(lines, 'Xclickscript') + call RunVim([], [], "-e -s -S Xclickscript -c qa") + + call delete('Xclickscript') + endfunc + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-9.0.0258/src/version.c 2022-08-24 18:07:56.889586310 +0100 --- src/version.c 2022-08-24 19:20:23.320070728 +0100 *************** *** 733,734 **** --- 733,736 ---- { /* Add new patch number below this line */ + /**/ + 259, /**/ -- ROBIN: (warily) And if you get a question wrong? ARTHUR: You are cast into the Gorge of Eternal Peril. ROBIN: Oh ... wacho! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///