Package: dialog
Version: 1.3-20190211-1
Severity: normal
Tags: patch
As originally reported in #930775, the dialog program aborts with an exit
status of
255 after resizing a widget. This is due to the dlg_win_resize function (util.c)
configuring an input timeout of 0.02s which is then left in place, causing the
next
regular character read (via dlg_getc in ui_getc.c) to fail with a timeout the
code
isn't prepared to handle. The orignal command for triggering this was
dialog --msgbox Text 0 0
Supposedly, this issue is fixed in 1.3-20190808-1 but this isn't the case: The
relevant
change in there ignores getc errors after a resize until some key event is
received.
Because of this, the bug can no longer be triggered via msgbox as the only key
event
processed by that cause the program to exit. It's still possible to trigger the
issue
by using
dialog --yesno Ohno 0 0
resizing the window and then pressing <tab> to switch from the yes- to the
no-button.
The attached patch fixes the issue by disabling the dlg_win_resize timeout
again before
returning from this function.
-- System Information:
Debian Release: 10.3
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 4.19.0-8-amd64 (SMP w/24 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8),
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages dialog depends on:
ii debianutils 4.8.6.1
ii libc6 2.28-10
ii libncursesw6 6.1+20181013-2+deb10u2
ii libtinfo6 6.1+20181013-2+deb10u2
dialog recommends no packages.
dialog suggests no packages.
-- no debconf information
diff --git a/util.c b/util.c
index 64b67d9..6fa917e 100644
--- a/util.c
+++ b/util.c
@@ -2234,6 +2234,7 @@ dlg_will_resize(WINDOW *win)
}
}
}
+ wtimeout(win, -1);
dlg_trace_msg("# caught %d KEY_RESIZE key%s\n",
1 + caught,
caught == 1 ? "" : "s");