Mercurial > vim
changeset 10883:cb71a5468aca v8.0.0331
patch 8.0.0331: restoring help snapshot accesses freed memory
commit https://github.com/vim/vim/commit/343b8c042967da82f2f022afa31f2c97a264c1c8
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Feb 17 12:04:56 2017 +0100
patch 8.0.0331: restoring help snapshot accesses freed memory
Problem: Restoring help snapshot accesses freed memory. (Dominique Pelle)
Solution: Don't restore a snapshot when the window closes.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 17 Feb 2017 12:15:05 +0100 |
parents | 2ef6f4092d68 |
children | 44174df54b0b |
files | src/Makefile src/testdir/Make_all.mak src/testdir/test_help.vim src/version.c src/window.c |
diffstat | 5 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Makefile +++ b/src/Makefile @@ -2132,6 +2132,7 @@ test_arglist \ test_goto \ test_gui \ test_hardcopy \ + test_help \ test_help_tagjump \ test_hide \ test_history \
--- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -154,6 +154,7 @@ NEW_TESTS = test_arglist.res \ test_gn.res \ test_gui.res \ test_hardcopy.res \ + test_help.res \ test_hide.res \ test_history.res \ test_hlsearch.res \
new file mode 100644 --- /dev/null +++ b/src/testdir/test_help.vim @@ -0,0 +1,10 @@ +" Tests for :help + +func Test_help_restore_snapshot() + help + set buftype= + help + edit x + help + helpclose +endfunc
--- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 331, +/**/ 330, /**/ 329,
--- a/src/window.c +++ b/src/window.c @@ -6551,7 +6551,7 @@ restore_snapshot( /* * Check if frames "sn" and "fr" have the same layout, same following frames - * and same children. + * and same children. And the window pointer is valid. */ static int check_snapshot_rec(frame_T *sn, frame_T *fr) @@ -6562,7 +6562,8 @@ check_snapshot_rec(frame_T *sn, frame_T || (sn->fr_next != NULL && check_snapshot_rec(sn->fr_next, fr->fr_next) == FAIL) || (sn->fr_child != NULL - && check_snapshot_rec(sn->fr_child, fr->fr_child) == FAIL)) + && check_snapshot_rec(sn->fr_child, fr->fr_child) == FAIL) + || !win_valid(sn->fr_win)) return FAIL; return OK; }