From 1d633413e5961589c2ae81300c96197443eee0c8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 11 Dec 2013 15:52:01 +0100 Subject: [PATCH] updated for version 7.4.118 Problem: It's possible that redrawing the status lines causes win_redr_custom() to be called recursively. Solution: Protect against recursiveness. (Yasuhiro Matsumoto) --- src/screen.c | 13 ++++++++++++- src/version.c | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/screen.c b/src/screen.c index f738e2bb6..a030207ae 100644 --- a/src/screen.c +++ b/src/screen.c @@ -6653,6 +6653,7 @@ win_redr_custom(wp, draw_ruler) win_T *wp; int draw_ruler; /* TRUE or FALSE */ { + static int entered = FALSE; int attr; int curattr; int row; @@ -6671,6 +6672,13 @@ win_redr_custom(wp, draw_ruler) win_T *ewp; int p_crb_save; + /* There is a tiny chance that this gets called recursively: When + * redrawing a status line triggers redrawing the ruler or tabline. + * Avoid trouble by not allowing recursion. */ + if (entered) + return; + entered = TRUE; + /* setup environment for the task at hand */ if (wp == NULL) { @@ -6746,7 +6754,7 @@ win_redr_custom(wp, draw_ruler) } if (maxwidth <= 0) - return; + goto theend; /* Temporarily reset 'cursorbind', we don't want a side effect from moving * the cursor away and back. */ @@ -6827,6 +6835,9 @@ win_redr_custom(wp, draw_ruler) while (col < Columns) TabPageIdxs[col++] = fillchar; } + +theend: + entered = FALSE; } #endif /* FEAT_STL_OPT */ diff --git a/src/version.c b/src/version.c index a8c54a9a6..29d41a9da 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 118, /**/ 117, /**/ -- 2.40.0