mirror of
https://github.com/vim/vim.git
synced 2025-10-04 05:25:06 -04:00
patch 9.0.0490: using freed memory with cmdwin and BufEnter autocmd
Problem: Using freed memory with cmdwin and BufEnter autocmd. Solution: Make sure pointer to b_p_iminsert is still valid.
This commit is contained in:
@@ -1587,6 +1587,7 @@ getcmdline_int(
|
|||||||
#endif
|
#endif
|
||||||
expand_T xpc;
|
expand_T xpc;
|
||||||
long *b_im_ptr = NULL;
|
long *b_im_ptr = NULL;
|
||||||
|
buf_T *b_im_ptr_buf = NULL; // buffer where b_im_ptr is valid
|
||||||
cmdline_info_T save_ccline;
|
cmdline_info_T save_ccline;
|
||||||
int did_save_ccline = FALSE;
|
int did_save_ccline = FALSE;
|
||||||
int cmdline_type;
|
int cmdline_type;
|
||||||
@@ -1683,6 +1684,7 @@ getcmdline_int(
|
|||||||
b_im_ptr = &curbuf->b_p_iminsert;
|
b_im_ptr = &curbuf->b_p_iminsert;
|
||||||
else
|
else
|
||||||
b_im_ptr = &curbuf->b_p_imsearch;
|
b_im_ptr = &curbuf->b_p_imsearch;
|
||||||
|
b_im_ptr_buf = curbuf;
|
||||||
if (*b_im_ptr == B_IMODE_LMAP)
|
if (*b_im_ptr == B_IMODE_LMAP)
|
||||||
State |= MODE_LANGMAP;
|
State |= MODE_LANGMAP;
|
||||||
#ifdef HAVE_INPUT_METHOD
|
#ifdef HAVE_INPUT_METHOD
|
||||||
@@ -2034,7 +2036,8 @@ getcmdline_int(
|
|||||||
goto cmdline_not_changed;
|
goto cmdline_not_changed;
|
||||||
|
|
||||||
case Ctrl_HAT:
|
case Ctrl_HAT:
|
||||||
cmdline_toggle_langmap(b_im_ptr);
|
cmdline_toggle_langmap(
|
||||||
|
buf_valid(b_im_ptr_buf) ? b_im_ptr : NULL);
|
||||||
goto cmdline_not_changed;
|
goto cmdline_not_changed;
|
||||||
|
|
||||||
// case '@': only in very old vi
|
// case '@': only in very old vi
|
||||||
@@ -2544,7 +2547,8 @@ returncmd:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_INPUT_METHOD
|
#ifdef HAVE_INPUT_METHOD
|
||||||
if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
|
if (b_im_ptr != NULL && buf_valid(b_im_ptr_buf)
|
||||||
|
&& *b_im_ptr != B_IMODE_LMAP)
|
||||||
im_save_status(b_im_ptr);
|
im_save_status(b_im_ptr);
|
||||||
im_set_active(FALSE);
|
im_set_active(FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -378,5 +378,15 @@ func Test_normal_escape()
|
|||||||
call assert_equal('" bar', @:)
|
call assert_equal('" bar', @:)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" This was using a pointer to a freed buffer
|
||||||
|
func Test_cmdwin_freed_buffer_ptr()
|
||||||
|
au BufEnter * next 0| file
|
||||||
|
edit 0
|
||||||
|
silent! norm q/
|
||||||
|
|
||||||
|
au! BufEnter
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -703,6 +703,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
490,
|
||||||
/**/
|
/**/
|
||||||
489,
|
489,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user