Просмотр исходного кода

Only do openpty() if both stdin/stdout are terminals

Closes: 746434
Michael Vogt лет назад: 12
Родитель
Сommit
a11f6c973b
2 измененных файлов с 7 добавлено и 6 удалено
  1. 6 5
      apt-pkg/deb/dpkgpm.cc
  2. 1 1
      test/integration/test-failing-maintainer-scripts

+ 6 - 5
apt-pkg/deb/dpkgpm.cc

@@ -1053,14 +1053,15 @@ void pkgDPkgPM::StartPtyMagic()
    }
 
    // setup the pty and stuff
-   struct	winsize win;
+   struct winsize win;
 
-   // if tcgetattr does not return zero there was a error
-   // and we do not do any pty magic
+   // if tcgetattr for both stdin/stdout returns 0 (no error)
+   // we do the pty magic
    _error->PushToStack();
-   if (tcgetattr(STDOUT_FILENO, &d->tt) == 0)
+   if (tcgetattr(STDIN_FILENO, &d->tt) == 0 &&
+       tcgetattr(STDOUT_FILENO, &d->tt) == 0)
    {
-       if (ioctl(1, TIOCGWINSZ, (char *)&win) < 0)
+       if (ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) < 0)
        {
            _error->Errno("ioctl", _("ioctl(TIOCGWINSZ) failed"));
        } else if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)

+ 1 - 1
test/integration/test-failing-maintainer-scripts

@@ -86,7 +86,7 @@ testmyfailure() {
 	testfailure "$@" -o APT::Status-Fd=3
 	msgtest 'Test for failure message of maintainerscript in' 'console log'
 	local TEST='rootdir/tmp/testfailure.output'
-	if grep -q 'exit status 29$' "$TEST"; then
+	if grep -q 'exit status 29' "$TEST"; then
 		msgpass
 	else
 		cat $TEST