From c5bbbb284554e666398fffcfa355bef8f22cba06 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 27 Nov 2000 03:53:13 +0000 Subject: [PATCH] Pay attention to fgets() failure return. --- src/bin/pg_dump/pg_backup_db.c | 23 +++++++++++++++-------- 1 file 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 72189eb29f..6ba9f85402 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'; -- 2.40.0