From b282b124975bd9c08db96879f2e614e82d8a85cb Mon Sep 17 00:00:00 2001 From: "jabber.developer2" Date: Wed, 27 May 2026 22:16:51 +0300 Subject: [PATCH] fix(ui): guard password/TLS prompt redraw while suspended inp_get_line()/inp_get_password() issued an unconditional doupdate() before their input loop. If such a prompt is raised while an external editor is active (e.g. a reconnect password or TLS-cert prompt arriving via session_process_events), that doupdate() writes over the editor. Guard it with is_suspended || isendwin(), matching the inp_readline() guard, so it fails safe even if a stray write later clears isendwin(). This closes the one suspended-write path the upstream fix left open. --- src/ui/inputwin.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 9ad741c6..b3629861 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -311,7 +311,10 @@ inp_get_line(void) werase(inp_win); wmove(inp_win, 0, 0); _inp_win_update_virtual(); - doupdate(); + // Don't write to the terminal while suspended (external editor active). + if (!is_suspended && !isendwin()) { + doupdate(); + } char* line = NULL; while (!line) { line = inp_readline(); @@ -338,7 +341,10 @@ inp_get_password(void) werase(inp_win); wmove(inp_win, 0, 0); _inp_win_update_virtual(); - doupdate(); + // Don't write to the terminal while suspended (external editor active). + if (!is_suspended && !isendwin()) { + doupdate(); + } char* password = NULL; get_password = TRUE; while (!password) {