Fix some bogus direct uses of realloc().
authorTom Lane
Tue, 18 Nov 2014 18:28:09 +0000 (13:28 -0500)
committerTom Lane
Tue, 18 Nov 2014 18:28:09 +0000 (13:28 -0500)
pg_dump/parallel.c was using realloc() directly with no error check.
While the odds of an actual failure here seem pretty low, Coverity
complains about it, so fix by using pg_realloc() instead.

While looking for other instances, I noticed a couple of places in
psql that hadn't gotten the memo about the availability of pg_realloc.
These aren't bugs, since they did have error checks, but verbosely
inconsistent code is not a good thing.

Back-patch as far as 9.3.  9.2 did not have pg_dump/parallel.c, nor
did it have pg_realloc available in all frontend code.

src/bin/pg_dump/parallel.c
src/bin/psql/command.c
src/bin/psql/tab-complete.c

index e50dd8b43f8a8aa42fa4a11561d7c4db307206c0..f5dbbbce716ec730139b1dc1a9b5ae76030552fd 100644 (file)
@@ -1303,7 +1303,7 @@ readMessageFromPipe(int fd)
        {
            /* could be any number */
            bufsize += 16;
-           msg = (char *) realloc(msg, bufsize);
+           msg = (char *) pg_realloc(msg, bufsize);
        }
    }
 
@@ -1311,7 +1311,7 @@ readMessageFromPipe(int fd)
     * Worker has closed the connection, make sure to clean up before return
     * since we are not returning msg (but did allocate it).
     */
-   free(msg);
+   pg_free(msg);
 
    return NULL;
 }
index 6504959e3581a03a7082694dd35eb3bcaefa81c3..9b7f241fd40bc21d18bae57b600bfa9fd1474aed 100644 (file)
@@ -1130,12 +1130,7 @@ exec_command(const char *cmd,
            while ((opt = psql_scan_slash_option(scan_state,
                                                 OT_NORMAL, NULL, false)))
            {
-               newval = realloc(newval, strlen(newval) + strlen(opt) + 1);
-               if (!newval)
-               {
-                   psql_error("out of memory\n");
-                   exit(EXIT_FAILURE);
-               }
+               newval = pg_realloc(newval, strlen(newval) + strlen(opt) + 1);
                strcat(newval, opt);
                free(opt);
            }
index ca76856da9f750a74a3190de980f158c1577c309..afb5e9962e020a315b3ace21293c316499fbddfc 100644 (file)
@@ -3975,13 +3975,8 @@ complete_from_variables(const char *text, const char *prefix, const char *suffix
        if (nvars >= maxvars)
        {
            maxvars *= 2;
-           varnames = (char **) realloc(varnames,
-                                        (maxvars + 1) * sizeof(char *));
-           if (!varnames)
-           {
-               psql_error("out of memory\n");
-               exit(EXIT_FAILURE);
-           }
+           varnames = (char **) pg_realloc(varnames,
+                                           (maxvars + 1) * sizeof(char *));
        }
 
        varnames[nvars++] = psprintf("%s%s%s", prefix, ptr->name, suffix);