diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index a5055271ae3..246055df960 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -7452,7 +7452,9 @@ passwordFromFile(const char *hostname, const char *port, const char *dbname, const char *username, const char *pgpassfile) { FILE *fp; +#ifndef WIN32 struct stat stat_buf; +#endif PQExpBufferData buf; if (dbname == NULL || dbname[0] == '\0') @@ -7477,10 +7479,14 @@ passwordFromFile(const char *hostname, const char *port, const char *dbname, port = DEF_PGPORT_STR; /* If password file cannot be opened, ignore it. */ - if (stat(pgpassfile, &stat_buf) != 0) + fp = fopen(pgpassfile, "r"); + if (fp == NULL) return NULL; #ifndef WIN32 + if (fstat(fileno(fp), &stat_buf) != 0) + return NULL; + if (!S_ISREG(stat_buf.st_mode)) { fprintf(stderr, @@ -7505,10 +7511,6 @@ passwordFromFile(const char *hostname, const char *port, const char *dbname, */ #endif - fp = fopen(pgpassfile, "r"); - if (fp == NULL) - return NULL; - /* Use an expansible buffer to accommodate any reasonable line length */ initPQExpBuffer(&buf);