summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2011-10-06 23:37:29 +0000
committerBruce Momjian2011-10-06 23:37:29 +0000
commita3996754cc0281293cc5bfb90bf594fef41aff5b (patch)
treec82449b89e630095ffa04ab4855fb431f89f6d83
parent981e5acd24cc63fa4f27dac3b35e5d0bf3921efc (diff)
In pg_upgrade, improve popen() failure detection by checking for fgets()
failures.
-rw-r--r--contrib/pg_upgrade/check.c17
-rw-r--r--contrib/pg_upgrade/controldata.c4
2 files changed, 10 insertions, 11 deletions
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index ea7464871e..5b9b4cd3d5 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -754,11 +754,11 @@ check_for_support_lib(ClusterInfo *cluster)
snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", cluster->bindir);
- if ((output = popen(cmd, "r")) == NULL)
- pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
- getErrorText(errno));
+ if ((output = popen(cmd, "r")) == NULL ||
+ fgets(libdir, sizeof(libdir), output) == NULL)
+ pg_log(PG_FATAL, "Could not get pkglibdir data using %s: %s\n",
+ cmd, getErrorText(errno));
- fgets(libdir, sizeof(libdir), output);
pclose(output);
@@ -787,11 +787,10 @@ get_bin_version(ClusterInfo *cluster)
snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir);
- if ((output = popen(cmd, "r")) == NULL)
- pg_log(PG_FATAL, "Could not get pg_ctl version data: %s\n",
- getErrorText(errno));
-
- fgets(cmd_output, sizeof(cmd_output), output);
+ if ((output = popen(cmd, "r")) == NULL ||
+ fgets(cmd_output, sizeof(cmd_output), output) == NULL)
+ pg_log(PG_FATAL, "Could not get pg_ctl version data using %s: %s\n",
+ cmd, getErrorText(errno));
pclose(output);
diff --git a/contrib/pg_upgrade/controldata.c b/contrib/pg_upgrade/controldata.c
index 788c690c2a..1120d79783 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/contrib/pg_upgrade/controldata.c
@@ -109,8 +109,8 @@ get_control_data(ClusterInfo *cluster, bool live_check)
fflush(stderr);
if ((output = popen(cmd, "r")) == NULL)
- pg_log(PG_FATAL, "Could not get control data: %s\n",
- getErrorText(errno));
+ pg_log(PG_FATAL, "Could not get control data using %s: %s\n",
+ cmd, getErrorText(errno));
/* Only pre-8.4 has these so if they are not set below we will check later */
cluster->controldata.lc_collate = NULL;