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