# HG changeset patch # User Bram Moolenaar # Date 1386773521 -3600 # Node ID 62c720661f81c17348636956c1158639d59e1e9f # Parent 63ad26475179bb722ee77b0935bfc8b9812f1c4f 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) diff --git a/src/screen.c b/src/screen.c --- 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 --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 118, +/**/ 117, /**/ 116,