mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 9.1.0189: Memory leak with "above" virttext and 'relativenumber'
Problem: Memory leak with "above" virtual text and 'relativenumber'. Solution: Free "text_props" and "text_prop_idxs" before returning. Also fix off-by-one error causing line number to be drawn beyond end of window (zeertzjq). fixes: #14239 closes: #14241 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
9f26e5a9bc
commit
918b92b961
@@ -1683,8 +1683,12 @@ win_line(
|
||||
{
|
||||
// skip over rows only used for virtual text above
|
||||
wlv.row += wlv.text_prop_above_count;
|
||||
if (wlv.row > endrow)
|
||||
if (wlv.row >= endrow)
|
||||
{
|
||||
vim_free(text_props);
|
||||
vim_free(text_prop_idxs);
|
||||
return wlv.row;
|
||||
}
|
||||
wlv.screen_row += wlv.text_prop_above_count;
|
||||
}
|
||||
#endif
|
||||
|
16
src/testdir/dumps/Test_prop_above_below_empty_6.dump
Normal file
16
src/testdir/dumps/Test_prop_above_below_empty_6.dump
Normal file
@@ -0,0 +1,16 @@
|
||||
| +0#af5f00255#ffffff0@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@1|1| |1+0#0000000&@7| @47
|
||||
| +0#af5f00255&@3|++0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
|2+0#af5f00255&| @2> +0#0000000&@55
|
||||
| +0#af5f00255&@3|++0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@1|1| |3+0#0000000&@8| @46
|
||||
| +0#af5f00255&@3|++0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@1|2| | +0#0000000&@55
|
||||
| +0#af5f00255&@3|++0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
| +0#af5f00255&@3|!+0#0000001#ffff4012| +0#0000000#ffffff0@54
|
||||
|@+0#4040ff13&@2| @56
|
||||
|:+0#0000000&|c|a|l@1| |A|d@1|M|o|r|e|(|)| @26|2|,|0|-|5|7| @7|T|o|p|
|
@@ -3080,6 +3080,12 @@ func Test_prop_with_text_above_below_empty()
|
||||
call prop_add(ln, 0, {'type': vt, 'text': '+', 'text_align': 'below'})
|
||||
endfor
|
||||
normal G
|
||||
|
||||
func AddMore()
|
||||
call prop_add(5, 0, {'type': g:vt, 'text': '!', 'text_align': 'above'})
|
||||
call prop_add(5, 0, {'type': g:vt, 'text': '!', 'text_align': 'above'})
|
||||
call prop_add(5, 0, {'type': g:vt, 'text': '!', 'text_align': 'above'})
|
||||
endfunc
|
||||
END
|
||||
call writefile(lines, 'XscriptPropAboveBelowEmpty', 'D')
|
||||
let buf = RunVimInTerminal('-S XscriptPropAboveBelowEmpty', #{rows: 16, cols: 60})
|
||||
@@ -3101,6 +3107,12 @@ func Test_prop_with_text_above_below_empty()
|
||||
call term_sendkeys(buf, "kk")
|
||||
call VerifyScreenDump(buf, 'Test_prop_above_below_empty_5', {})
|
||||
|
||||
" This was drawing line number over cmdline and leaking memory.
|
||||
call term_sendkeys(buf, ":call AddMore()\<CR>")
|
||||
call term_sendkeys(buf, "gg")
|
||||
call term_sendkeys(buf, "j")
|
||||
call VerifyScreenDump(buf, 'Test_prop_above_below_empty_6', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
189,
|
||||
/**/
|
||||
188,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user