Check if we are on tty before initializing curses.
authorStanislav Ochotnicky <sochotnicky@redhat.com>
Fri, 14 Feb 2014 11:58:38 +0000 (12:58 +0100)
committerWerner Koch <wk@gnupg.org>
Sun, 26 Oct 2014 10:05:50 +0000 (11:05 +0100)
* pinentry/pinentry-curses.c (dialog_run): Check stant stdin and stout
are connected to ttys.

--

When we did not have a ttyname we just used stdin/out without checking
if it's a proper TTY or a pipe. In some cases this can cause endless
loop or escape seqeunces on the terminal.

This commit changes behaviour so that if stdin/out is not tty and no
ttyname is specified we error-out with errno set to ENOTTY

pinentry/pinentry-curses.c

index 58da255..4fc8bc4 100644 (file)
@@ -752,6 +752,11 @@ dialog_run (pinentry_t pinentry, const char *tty_name, const char *tty_type)
     {
       if (!init_screen)
        {
+          if (!(isatty(fileno(stdin)) && isatty(fileno(stdout))))
+            {
+              errno = ENOTTY;
+              return -1;
+            }
          init_screen = 1;
          initscr ();
        }