comparison src/usercmd.c @ 27805:afbe86e8b24a v8.2.4428

patch 8.2.4428: crash when switching tabpage while in the cmdline window Commit: https://github.com/vim/vim/commit/0f6e28f686dbb59ab3b562408ab9b2234797b9b1 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 20 20:49:35 2022 +0000 patch 8.2.4428: crash when switching tabpage while in the cmdline window Problem: Crash when switching tabpage while in the cmdline window. Solution: Disallow switching tabpage when in the cmdline window.
author Bram Moolenaar <Bram@vim.org>
date Sun, 20 Feb 2022 22:00:03 +0100
parents 858002fef4b7
children b737bfa876c5
comparison
equal deleted inserted replaced
27804:8fc68ce4a097 27805:afbe86e8b24a
139 // only full match global is accepted. 139 // only full match global is accepted.
140 140
141 /* 141 /*
142 * Look for buffer-local user commands first, then global ones. 142 * Look for buffer-local user commands first, then global ones.
143 */ 143 */
144 gap = 144 gap = &prevwin_curwin()->w_buffer->b_ucmds;
145 #ifdef FEAT_CMDWIN
146 is_in_cmdwin() ? &prevwin->w_buffer->b_ucmds :
147 #endif
148 &curbuf->b_ucmds;
149 for (;;) 145 for (;;)
150 { 146 {
151 for (j = 0; j < gap->ga_len; ++j) 147 for (j = 0; j < gap->ga_len; ++j)
152 { 148 {
153 uc = USER_CMD_GA(gap, j); 149 uc = USER_CMD_GA(gap, j);
356 */ 352 */
357 char_u * 353 char_u *
358 get_user_commands(expand_T *xp UNUSED, int idx) 354 get_user_commands(expand_T *xp UNUSED, int idx)
359 { 355 {
360 // In cmdwin, the alternative buffer should be used. 356 // In cmdwin, the alternative buffer should be used.
361 buf_T *buf = 357 buf_T *buf = prevwin_curwin()->w_buffer;
362 #ifdef FEAT_CMDWIN
363 is_in_cmdwin() ? prevwin->w_buffer :
364 #endif
365 curbuf;
366 358
367 if (idx < buf->b_ucmds.ga_len) 359 if (idx < buf->b_ucmds.ga_len)
368 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; 360 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name;
369 idx -= buf->b_ucmds.ga_len; 361 idx -= buf->b_ucmds.ga_len;
370 if (idx < ucmds.ga_len) 362 if (idx < ucmds.ga_len)
384 if (cmdidx == CMD_USER && idx < ucmds.ga_len) 376 if (cmdidx == CMD_USER && idx < ucmds.ga_len)
385 return USER_CMD(idx)->uc_name; 377 return USER_CMD(idx)->uc_name;
386 if (cmdidx == CMD_USER_BUF) 378 if (cmdidx == CMD_USER_BUF)
387 { 379 {
388 // In cmdwin, the alternative buffer should be used. 380 // In cmdwin, the alternative buffer should be used.
389 buf_T *buf = 381 buf_T *buf = prevwin_curwin()->w_buffer;
390 #ifdef FEAT_CMDWIN
391 is_in_cmdwin() ? prevwin->w_buffer :
392 #endif
393 curbuf;
394 382
395 if (idx < buf->b_ucmds.ga_len) 383 if (idx < buf->b_ucmds.ga_len)
396 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; 384 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name;
397 } 385 }
398 return NULL; 386 return NULL;
476 int over; 464 int over;
477 long a; 465 long a;
478 garray_T *gap; 466 garray_T *gap;
479 467
480 // In cmdwin, the alternative buffer should be used. 468 // In cmdwin, the alternative buffer should be used.
481 gap = 469 gap = &prevwin_curwin()->w_buffer->b_ucmds;
482 #ifdef FEAT_CMDWIN
483 is_in_cmdwin() ? &prevwin->w_buffer->b_ucmds :
484 #endif
485 &curbuf->b_ucmds;
486 for (;;) 470 for (;;)
487 { 471 {
488 for (i = 0; i < gap->ga_len; ++i) 472 for (i = 0; i < gap->ga_len; ++i)
489 { 473 {
490 cmd = USER_CMD_GA(gap, i); 474 cmd = USER_CMD_GA(gap, i);