]> granicus.if.org Git - postgresql/commitdiff
In pg_upgrade, improve popen() failure detection by checking for fgets()
authorBruce Momjian <bruce@momjian.us>
Thu, 6 Oct 2011 23:37:29 +0000 (19:37 -0400)
committerBruce Momjian <bruce@momjian.us>
Thu, 6 Oct 2011 23:37:29 +0000 (19:37 -0400)
failures.

contrib/pg_upgrade/check.c
contrib/pg_upgrade/controldata.c

index ea7464871e8bf2b12a652c1b063a7d87f13be3f7..5b9b4cd3d5a3541eb9c971b6914bdbb080c61a04 100644 (file)
@@ -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);
 
index 788c690c2a656a1230bea74c67f071f6c9abca76..1120d797838d73c11f143329abcb7d526872612b 100644 (file)
@@ -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;