diff options
author | Tom Lane | 2000-11-27 03:53:13 +0000 |
---|---|---|
committer | Tom Lane | 2000-11-27 03:53:13 +0000 |
commit | c5bbbb284554e666398fffcfa355bef8f22cba06 (patch) | |
tree | 41cc84f83bd2f00408c5e760e01eace6346c1088 /src | |
parent | a568b2273c4208c87172269bcba687512f98887d (diff) |
Pay attention to fgets() failure return.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_dump/pg_backup_db.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index 72189eb29fb..6ba9f85402b 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -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'; |