]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Pay attention to fgets() failure return.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Nov 2000 03:53:13 +0000 (03:53 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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';