Mercurial > vim
changeset 10835:c9da7f9137af v8.0.0307
patch 8.0.0307: asan detects a memory error when EXITFREE is defined
commit https://github.com/vim/vim/commit/955f198fc546cc30a34361932d3f454a61df0efa
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Feb 5 15:10:51 2017 +0100
patch 8.0.0307: asan detects a memory error when EXITFREE is defined
Problem: Asan detects a memory error when EXITFREE is defined. (Dominique
Pelle)
Solution: In getvcol() check for ml_get_buf() returning an empty string.
Also skip adjusting the scroll position. Set "exiting" in
mch_exit() for all systems.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 05 Feb 2017 15:15:04 +0100 |
parents | 63f95d6b8f60 |
children | 09caff8682c4 |
files | src/charset.c src/os_amiga.c src/os_mswin.c src/os_win32.c src/version.c src/window.c |
diffstat | 6 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/charset.c +++ b/src/charset.c @@ -1296,6 +1296,10 @@ getvcol( posptr = NULL; /* continue until the NUL */ else { + /* Special check for an empty line, which can happen on exit, when + * ml_get_buf() always returns an empty string. */ + if (*ptr == NUL) + pos->col = 0; posptr = ptr + pos->col; #ifdef FEAT_MBYTE if (has_mbyte)
--- a/src/os_amiga.c +++ b/src/os_amiga.c @@ -889,6 +889,8 @@ mch_early_init(void) void mch_exit(int r) { + exiting = TRUE; + if (raw_in) /* put terminal in 'normal' mode */ { settmode(TMODE_COOK);
--- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -201,6 +201,8 @@ int _stricoll(char *a, char *b) void mch_exit(int r) { + exiting = TRUE; + display_errors(); ml_close_all(TRUE); /* remove all memfiles */
--- a/src/os_win32.c +++ b/src/os_win32.c @@ -2538,8 +2538,9 @@ mch_init(void) void mch_exit(int r) { + exiting = TRUE; + stoptermcap(); - if (g_fWindInitCalled) settmode(TMODE_COOK);
--- 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 */ /**/ + 307, +/**/ 306, /**/ 305,
--- a/src/window.c +++ b/src/window.c @@ -5708,7 +5708,10 @@ win_new_height(win_T *wp, int height) wp->w_height = height; wp->w_skipcol = 0; - scroll_to_fraction(wp, prev_height); + /* There is no point in adjusting the scroll position when exiting. Some + * values might be invalid. */ + if (!exiting) + scroll_to_fraction(wp, prev_height); } void