aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2021-11-17 07:07:15 +0800
committerzeertzjq <zeertzjq@outlook.com>2021-11-17 07:11:46 +0800
commit8dbe47a4bc823e05afed8048e548a5ff9cc1819f (patch)
tree35bc67f1a348f77bf22023e32113f4ed9770ab2d /src
parent5ed2a5cf9cf6a5f90e2b5bf3ef26ffea02f923f1 (diff)
downloadrneovim-8dbe47a4bc823e05afed8048e548a5ff9cc1819f.tar.gz
rneovim-8dbe47a4bc823e05afed8048e548a5ff9cc1819f.tar.bz2
rneovim-8dbe47a4bc823e05afed8048e548a5ff9cc1819f.zip
vim-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 vim/vim#9071) https://github.com/vim/vim/commit/7a33ebfc5b04353aa7674972087d581def8fdcc1
Diffstat (limited to 'src')
-rw-r--r--src/nvim/testdir/test_listchars.vim16
-rw-r--r--src/nvim/window.c2
2 files changed, 13 insertions, 5 deletions
diff --git a/src/nvim/testdir/test_listchars.vim b/src/nvim/testdir/test_listchars.vim
index d55237c202..7596b34433 100644
--- a/src/nvim/testdir/test_listchars.vim
+++ b/src/nvim/testdir/test_listchars.vim
@@ -440,7 +440,7 @@ func Test_listchars_window_local()
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
" Setting the global setting to the default value should not impact a window
- " using a local setting
+ " using a local setting.
split
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
setglobal listchars=eol:$ " Accommodate Nvim default
@@ -449,7 +449,7 @@ func Test_listchars_window_local()
call assert_equal(['^I one two $'], ScreenLines(1, virtcol('$')))
" 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:$
split
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
@@ -460,7 +460,7 @@ func Test_listchars_window_local()
call assert_equal(['{......}--one==two##$'], ScreenLines(1, virtcol('$')))
" 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
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
call assert_equal(['<------>__one..two@@#'], ScreenLines(1, virtcol('$')))
@@ -470,7 +470,7 @@ func Test_listchars_window_local()
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
" Setting invalid value for a local setting should not impact the local and
- " global settings
+ " global settings.
split
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
let cmd = 'setlocal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
@@ -480,7 +480,7 @@ func Test_listchars_window_local()
call assert_equal(['+------+^^one>>two<<%'], ScreenLines(1, virtcol('$')))
" Setting invalid value for a global setting should not impact the local and
- " global settings
+ " global settings.
split
setlocal listchars=tab:<->,lead:_,space:.,trail:@,eol:#
let cmd = 'setglobal listchars=tab:{.},lead:-,space:=,trail:#,eol:$,x'
@@ -489,6 +489,12 @@ func Test_listchars_window_local()
close
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!
set list& listchars&
endfunc
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 59079584ca..26f483c842 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -4750,6 +4750,8 @@ static void win_free(win_T *wp, tabpage_T *tp)
clear_winopt(&wp->w_onebuf_opt);
clear_winopt(&wp->w_allbuf_opt);
+ xfree(wp->w_p_lcs_chars.multispace);
+
vars_clear(&wp->w_vars->dv_hashtab); // free all w: variables
hash_init(&wp->w_vars->dv_hashtab);
unref_var_dict(wp->w_vars);