Pay attention to fgets() failure return.
authorTom Lane
Mon, 27 Nov 2000 03:53:13 +0000 (03:53 +0000)
committerTom Lane
Mon, 27 Nov 2000 03:53:13 +0000 (03:53 +0000)
src/bin/pg_dump/pg_backup_db.c

index 72189eb29fbe7433b338cf0a37b465bdc3721f0f..6ba9f85402bf8e201810952d2d3c5d630c289e66 100644 (file)
@@ -44,6 +44,7 @@ _prompt_for_password(char *username, char *password)
 {
    char        buf[512];
    int         length;
+   int         buflen;
 
 #ifdef HAVE_TERMIOS_H
    struct termios t_orig,
@@ -57,15 +58,18 @@ _prompt_for_password(char *username, char *password)
    {
        fprintf(stderr, "Username: ");
        fflush(stderr);
-       fgets(username, 100, stdin);
+       if (fgets(username, 100, stdin) == NULL)
+           username[0] = '\0';
        length = strlen(username);
-       /* skip rest of the line */
        if (length > 0 && username[length - 1] != '\n')
        {
+           /* eat rest of the line */
            do
            {
-               fgets(buf, 512, stdin);
-           } while (buf[strlen(buf) - 1] != '\n');
+               if (fgets(buf, sizeof(buf), stdin) == NULL)
+                   break;
+               buflen = strlen(buf);
+           } while (buflen > 0 && buf[buflen - 1] != '\n');
        }
        if (length > 0 && username[length - 1] == '\n')
            username[length - 1] = '\0';
@@ -79,19 +83,22 @@ _prompt_for_password(char *username, char *password)
 #endif
    fprintf(stderr, "Password: ");
    fflush(stderr);
-   fgets(password, 100, stdin);
+   if (fgets(password, 100, stdin) == NULL)
+       password[0] = '\0';
 #ifdef HAVE_TERMIOS_H
    tcsetattr(0, TCSADRAIN, &t_orig);
 #endif
 
    length = strlen(password);
-   /* skip rest of the line */
    if (length > 0 && password[length - 1] != '\n')
    {
+       /* eat rest of the line */
        do
        {
-           fgets(buf, 512, stdin);
-       } while (buf[strlen(buf) - 1] != '\n');
+           if (fgets(buf, sizeof(buf), stdin) == NULL)
+               break;
+           buflen = strlen(buf);
+       } while (buflen > 0 && buf[buflen - 1] != '\n');
    }
    if (length > 0 && password[length - 1] == '\n')
        password[length - 1] = '\0';