Skip to content

Commit a399675

Browse files
committed
In pg_upgrade, improve popen() failure detection by checking for fgets()
failures.
1 parent 981e5ac commit a399675

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

contrib/pg_upgrade/check.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -754,11 +754,11 @@ check_for_support_lib(ClusterInfo *cluster)
754754

755755
snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", cluster->bindir);
756756

757-
if ((output = popen(cmd, "r")) == NULL)
758-
pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
759-
getErrorText(errno));
757+
if ((output = popen(cmd, "r")) == NULL ||
758+
fgets(libdir, sizeof(libdir), output) == NULL)
759+
pg_log(PG_FATAL, "Could not get pkglibdir data using %s: %s\n",
760+
cmd, getErrorText(errno));
760761

761-
fgets(libdir, sizeof(libdir), output);
762762

763763
pclose(output);
764764

@@ -787,11 +787,10 @@ get_bin_version(ClusterInfo *cluster)
787787

788788
snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir);
789789

790-
if ((output = popen(cmd, "r")) == NULL)
791-
pg_log(PG_FATAL, "Could not get pg_ctl version data: %s\n",
792-
getErrorText(errno));
793-
794-
fgets(cmd_output, sizeof(cmd_output), output);
790+
if ((output = popen(cmd, "r")) == NULL ||
791+
fgets(cmd_output, sizeof(cmd_output), output) == NULL)
792+
pg_log(PG_FATAL, "Could not get pg_ctl version data using %s: %s\n",
793+
cmd, getErrorText(errno));
795794

796795
pclose(output);
797796

contrib/pg_upgrade/controldata.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ get_control_data(ClusterInfo *cluster, bool live_check)
109109
fflush(stderr);
110110

111111
if ((output = popen(cmd, "r")) == NULL)
112-
pg_log(PG_FATAL, "Could not get control data: %s\n",
113-
getErrorText(errno));
112+
pg_log(PG_FATAL, "Could not get control data using %s: %s\n",
113+
cmd, getErrorText(errno));
114114

115115
/* Only pre-8.4 has these so if they are not set below we will check later */
116116
cluster->controldata.lc_collate = NULL;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy