Package: debconf
Version: 1.5.52
Severity: normal
Dear Maintainer,
The code in Debconf::FrontEnd::Teletype's display_nowrap silently
assumes that the display has more than 2 rows. On a terminal with 2 rows
or less, display_nowrap enters an endless loop, since no actual text
line is ever displayed, only the prompt itself.
I admit this is an extreme corner-case, but the following scenario can bring a
whole system down:
1. Launch a debconf-using application in a two-row terminal
2. Kill the parent process while debconf is paging
On the next input or signal, the debconf process will spin
uncontrollably; reading from STDIN will return immediately due to the
broken pipe and as prompt() does not check for errors while reading the
response, it will try to display_nowrap("\n") unconditionally, which in
turn will call prompt() recursively ad infinitum (or until the system's
memory is exhausted).
The attached patch fixes the issue.
Regards,
Apollon
-- System Information:
Debian Release: jessie/sid
APT prefers testing
APT policy: (500, 'testing'), (500, 'stable'), (90, 'unstable'), (1,
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.13-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=el_GR.UTF-8, LC_CTYPE=el_GR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages debconf depends on:
ii perl-base 5.18.2-2+b1
Versions of packages debconf recommends:
ii apt-utils 1.0.1
ii debconf-i18n 1.5.52
Versions of packages debconf suggests:
ii debconf-doc 1.5.52
ii debconf-utils 1.5.52
ii libgtk2-perl 2:1.249-2
ii libnet-ldap-perl 1:0.6200+dfsg-1
pn libqtcore4-perl <none>
pn libqtgui4-perl <none>
ii libterm-readline-gnu-perl 1.24-1
ii perl 5.18.2-2+b1
ii whiptail 0.52.15-3+b1
-- debconf-show failed
--
Apollon Oikonomopoulos [email protected]
Skroutz S.A. http://skroutz.gr
>From d597bd4e8b5de0811be7658d57fe4e1086af69a6 Mon Sep 17 00:00:00 2001
From: Apollon Oikonomopoulos <[email protected]>
Date: Tue, 22 Apr 2014 14:44:38 +0300
Subject: [PATCH] Teletype: page only if screen has more than two rows
The code in Debconf::FrontEnd::Teletype's display_nowrap silently
assumes that the display has more than 2 rows. On a terminal with 2 rows
or less, display_nowrap enters an endless loop, since no actual text
line is ever displayed, only the prompt itself. Since there is no point to try
paging, we completely skip it for 2-or-less-row-terminals.
---
Debconf/FrontEnd/Teletype.pm | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/Debconf/FrontEnd/Teletype.pm b/Debconf/FrontEnd/Teletype.pm
index df311e7..f8c76c6 100644
--- a/Debconf/FrontEnd/Teletype.pm
+++ b/Debconf/FrontEnd/Teletype.pm
@@ -90,7 +90,10 @@ sub display_nowrap {
# If we had to guess at the screenheight, don't bother
# ever pausing; for all I know this is some real teletype
# with an infinite height "screen" of fan-fold paper..
- if (! $this->screenheight_guessed &&
+ # Also don't bother pausing if the screenheight is 2 rows or
+ # less, since that would leave no space to display the actual
+ # text.
+ if (! $this->screenheight_guessed && $this->screenheight > 2 &&
$this->linecount($this->linecount+1) > $this->screenheight - 2) {
my $resp=$this->prompt(
prompt => '['.gettext("More").']',
--
1.9.2