aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-11-27 02:20:36 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-11-27 02:20:36 +0000
commit9c5327b99be079f9052efaee210f7e517bc48219 (patch)
treec0cce051dccecfbeb1feb76e4567602c75d53424 /src
parente8a72c0db22b75144dd2ec0410352dbf34d4bde6 (diff)
downloadpostgresql-9c5327b99be079f9052efaee210f7e517bc48219.tar.gz
postgresql-9c5327b99be079f9052efaee210f7e517bc48219.zip
Pay attention to failure returns from fgets() in all cases.
Avoid infinite loop prompting for password at stdin EOF.
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/command.c7
-rw-r--r--src/bin/psql/common.c14
-rw-r--r--src/bin/psql/input.c4
-rw-r--r--src/bin/psql/prompt.c4
-rw-r--r--src/bin/psql/startup.c5
5 files changed, 19 insertions, 15 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index b17d37b674d..782c161c23a 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.40 2000/11/26 11:09:32 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.41 2000/11/27 02:20:36 tgl Exp $
*/
#include "postgres.h"
#include "command.h"
@@ -1236,7 +1236,8 @@ do_connect(const char *new_dbname, const char *new_user)
NULL, NULL, dbparam, userparam, pwparam);
if (PQstatus(pset.db) == CONNECTION_BAD &&
- strcmp(PQerrorMessage(pset.db), "fe_sendauth: no password supplied\n") == 0)
+ strcmp(PQerrorMessage(pset.db), "fe_sendauth: no password supplied\n") == 0 &&
+ !feof(stdin))
{
PQfinish(pset.db);
need_pass = true;
@@ -1491,7 +1492,7 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf)
char line[1024];
resetPQExpBuffer(query_buf);
- while (fgets(line, 1024, stream))
+ while (fgets(line, sizeof(line), stream) != NULL)
appendPQExpBufferStr(query_buf, line);
if (ferror(stream))
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 66eeb0ef6b2..05b11651e9d 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.26 2000/11/27 01:28:40 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.27 2000/11/27 02:20:36 tgl Exp $
*/
#include "postgres.h"
#include "common.h"
@@ -201,7 +201,8 @@ simple_prompt(const char *prompt, int maxlen, bool echo)
}
#endif
- fgets(destination, maxlen, stdin);
+ if (fgets(destination, maxlen, stdin) == NULL)
+ destination[0] = '\0';
#ifdef HAVE_TERMIOS_H
if (!echo)
@@ -222,7 +223,8 @@ simple_prompt(const char *prompt, int maxlen, bool echo)
do
{
- fgets(buf, sizeof(buf), stdin);
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
buflen = strlen(buf);
} while (buflen > 0 && buf[buflen - 1] != '\n');
}
@@ -389,9 +391,9 @@ SendQuery(const char *query)
"***(press return to proceed or enter x and return to cancel)********************\n",
query);
fflush(stdout);
- fgets(buf, 3, stdin);
- if (buf[0] == 'x')
- return false;
+ if (fgets(buf, sizeof(buf), stdin) != NULL)
+ if (buf[0] == 'x')
+ return false;
}
else
{
diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c
index 86200ad0522..78e2ae3568a 100644
--- a/src/bin/psql/input.c
+++ b/src/bin/psql/input.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/input.c,v 1.13 2000/04/12 17:16:22 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/input.c,v 1.14 2000/11/27 02:20:36 tgl Exp $
*/
#include "postgres.h"
#include "input.h"
@@ -91,7 +91,7 @@ gets_fromFile(FILE *source)
initPQExpBuffer(&buffer);
- while (fgets(line, 1024, source) != NULL)
+ while (fgets(line, sizeof(line), source) != NULL)
{
appendPQExpBufferStr(&buffer, line);
if (buffer.data[buffer.len - 1] == '\n')
diff --git a/src/bin/psql/prompt.c b/src/bin/psql/prompt.c
index 4788c2ce128..7927a9caa29 100644
--- a/src/bin/psql/prompt.c
+++ b/src/bin/psql/prompt.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.15 2000/11/13 23:37:53 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.16 2000/11/27 02:20:36 tgl Exp $
*/
#include "postgres.h"
#include "prompt.h"
@@ -277,7 +277,7 @@ get_prompt(promptStatus_t status)
fgets(buf, MAX_PROMPT_SIZE - 1, fd);
pclose(fd);
}
- if (buf[strlen(buf) - 1] == '\n')
+ if (strlen(buf) > 0 && buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = '\0';
free(file);
p += cmdend + 1;
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 1a66d5fce36..e5513473710 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.40 2000/11/25 19:05:44 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.41 2000/11/27 02:20:36 tgl Exp $
*/
#include "postgres.h"
@@ -180,7 +180,8 @@ main(int argc, char *argv[])
username, password);
if (PQstatus(pset.db) == CONNECTION_BAD &&
- strcmp(PQerrorMessage(pset.db), "fe_sendauth: no password supplied\n") == 0)
+ strcmp(PQerrorMessage(pset.db), "fe_sendauth: no password supplied\n") == 0 &&
+ !feof(stdin))
{
PQfinish(pset.db);
need_pass = true;