fix(float): crash from nasty :fclose autocmds (#36137)

Problem: :fclose may crash Nvim if autocommands close floats prematurely.
Alternatively, :fclose may call win_close for windows not in curtab if
autocommands change curtab or move windows between tab pages via
nvim_win_set_config (may not crash, but is wrong).

Solution: check win_valid before calling win_close.

(cherry picked from commit 3ccba4cdff)

Backports #36134.
This commit is contained in:
Sean Dewar
2025-10-11 18:37:03 +01:00
committed by GitHub
parent 5c583a8616
commit 86b2c0f201
2 changed files with 51 additions and 1 deletions

View File

@@ -290,7 +290,8 @@ void win_float_remove(bool bang, int count)
qsort(float_win_arr.items, float_win_arr.size, sizeof(win_T *), float_zindex_cmp);
}
for (size_t i = 0; i < float_win_arr.size; i++) {
if (win_close(float_win_arr.items[i], false, false) == FAIL) {
win_T *wp = float_win_arr.items[i];
if (win_valid(wp) && win_close(wp, false, false) == FAIL) {
break;
}
if (!bang) {