Skip to content

Commit

Permalink
patch 9.0.0490: using freed memory with cmdwin and BufEnter autocmd
Browse files Browse the repository at this point in the history
Problem:    Using freed memory with cmdwin and BufEnter autocmd.
Solution:   Make sure pointer to b_p_iminsert is still valid.
  • Loading branch information
brammool committed Sep 17, 2022
1 parent fb593c5 commit 1c3dd8d
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/ex_getln.c
Expand Up @@ -1587,6 +1587,7 @@ getcmdline_int(
#endif
expand_T xpc;
long *b_im_ptr = NULL;
buf_T *b_im_ptr_buf = NULL; // buffer where b_im_ptr is valid
cmdline_info_T save_ccline;
int did_save_ccline = FALSE;
int cmdline_type;
Expand Down Expand Up @@ -1683,6 +1684,7 @@ getcmdline_int(
b_im_ptr = &curbuf->b_p_iminsert;
else
b_im_ptr = &curbuf->b_p_imsearch;
b_im_ptr_buf = curbuf;
if (*b_im_ptr == B_IMODE_LMAP)
State |= MODE_LANGMAP;
#ifdef HAVE_INPUT_METHOD
Expand Down Expand Up @@ -2034,7 +2036,8 @@ getcmdline_int(
goto cmdline_not_changed;

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;

// case '@': only in very old vi
Expand Down Expand Up @@ -2544,7 +2547,8 @@ getcmdline_int(
#endif

#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_set_active(FALSE);
#endif
Expand Down
10 changes: 10 additions & 0 deletions src/testdir/test_cmdwin.vim
Expand Up @@ -378,5 +378,15 @@ func Test_normal_escape()
call assert_equal('" bar', @:)
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -703,6 +703,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
490,
/**/
489,
/**/
Expand Down

0 comments on commit 1c3dd8d

Please sign in to comment.