mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.3572: memory leak when closing window and using "multispace"
Problem: Memory leak when closing window and using "multispace" in 'listchars'. Solution: Free the memory. (closes #9071)
This commit is contained in:
@@ -445,7 +445,7 @@ func Test_listchars_window_local()
|
|||||||
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
" Setting the global setting to the default value should not impact a window
|
" Setting the global setting to the default value should not impact a window
|
||||||
" using a local setting
|
" using a local setting.
|
||||||
split
|
split
|
||||||
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
||||||
setglobal listchars&vim
|
setglobal listchars&vim
|
||||||
@@ -454,7 +454,7 @@ func Test_listchars_window_local()
|
|||||||
call assert_equal(['^I one two $'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['^I one two $'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
" Setting the local setting to the default value should not impact a window
|
" Setting the local setting to the default value should not impact a window
|
||||||
" using a global setting
|
" using a global setting.
|
||||||
set listchars=tab:{.},lead:-,space:=,trail:#,eol:$
|
set listchars=tab:{.},lead:-,space:=,trail:#,eol:$
|
||||||
split
|
split
|
||||||
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
||||||
@@ -465,7 +465,7 @@ func Test_listchars_window_local()
|
|||||||
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
" Using set in a window with a local setting should change it to use the
|
" Using set in a window with a local setting should change it to use the
|
||||||
" global setting and also impact other windows using the global setting
|
" global setting and also impact other windows using the global setting.
|
||||||
split
|
split
|
||||||
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
||||||
call assert_equal(['<------>__one..two@@#'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['<------>__one..two@@#'], ScreenLines(1, virtcol('$')))
|
||||||
@@ -475,7 +475,7 @@ func Test_listchars_window_local()
|
|||||||
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
" Setting invalid value for a local setting should not impact the local and
|
" Setting invalid value for a local setting should not impact the local and
|
||||||
" global settings
|
" global settings.
|
||||||
split
|
split
|
||||||
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
||||||
let cmd = 'setlocal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
|
let cmd = 'setlocal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
|
||||||
@@ -485,7 +485,7 @@ func Test_listchars_window_local()
|
|||||||
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
" Setting invalid value for a global setting should not impact the local and
|
" Setting invalid value for a global setting should not impact the local and
|
||||||
" global settings
|
" global settings.
|
||||||
split
|
split
|
||||||
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
|
||||||
let cmd = 'setglobal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
|
let cmd = 'setglobal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
|
||||||
@@ -494,6 +494,12 @@ func Test_listchars_window_local()
|
|||||||
close
|
close
|
||||||
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
|
||||||
|
|
||||||
|
" Closing window with local lcs-multispace should not cause a memory leak.
|
||||||
|
setlocal listchars=multispace:---+
|
||||||
|
split
|
||||||
|
call s:CheckListCharsValue('multispace:---+')
|
||||||
|
close
|
||||||
|
|
||||||
%bw!
|
%bw!
|
||||||
set list& listchars&
|
set list& listchars&
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -757,6 +757,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 */
|
||||||
|
/**/
|
||||||
|
3572,
|
||||||
/**/
|
/**/
|
||||||
3571,
|
3571,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -5041,6 +5041,8 @@ win_free(
|
|||||||
clear_winopt(&wp->w_onebuf_opt);
|
clear_winopt(&wp->w_onebuf_opt);
|
||||||
clear_winopt(&wp->w_allbuf_opt);
|
clear_winopt(&wp->w_allbuf_opt);
|
||||||
|
|
||||||
|
vim_free(wp->w_lcs_chars.multispace);
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
vars_clear(&wp->w_vars->dv_hashtab); // free all w: variables
|
vars_clear(&wp->w_vars->dv_hashtab); // free all w: variables
|
||||||
hash_init(&wp->w_vars->dv_hashtab);
|
hash_init(&wp->w_vars->dv_hashtab);
|
||||||
|
Reference in New Issue
Block a user