Fix some bogus direct uses of realloc().

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.
This commit is contained in:
Tom Lane 2014-11-18 13:28:06 -05:00
parent 606c0123d6
commit 8b13e5c6c0
3 changed files with 5 additions and 15 deletions

View File

@ -1308,7 +1308,7 @@ readMessageFromPipe(int fd)
{ {
/* could be any number */ /* could be any number */
bufsize += 16; bufsize += 16;
msg = (char *) realloc(msg, bufsize); msg = (char *) pg_realloc(msg, bufsize);
} }
} }
@ -1316,7 +1316,7 @@ readMessageFromPipe(int fd)
* Worker has closed the connection, make sure to clean up before return * Worker has closed the connection, make sure to clean up before return
* since we are not returning msg (but did allocate it). * since we are not returning msg (but did allocate it).
*/ */
free(msg); pg_free(msg);
return NULL; return NULL;
} }

View File

@ -1133,12 +1133,7 @@ exec_command(const char *cmd,
while ((opt = psql_scan_slash_option(scan_state, while ((opt = psql_scan_slash_option(scan_state,
OT_NORMAL, NULL, false))) OT_NORMAL, NULL, false)))
{ {
newval = realloc(newval, strlen(newval) + strlen(opt) + 1); newval = pg_realloc(newval, strlen(newval) + strlen(opt) + 1);
if (!newval)
{
psql_error("out of memory\n");
exit(EXIT_FAILURE);
}
strcat(newval, opt); strcat(newval, opt);
free(opt); free(opt);
} }

View File

@ -4331,13 +4331,8 @@ append_variable_names(char ***varnames, int *nvars,
if (*nvars >= *maxvars) if (*nvars >= *maxvars)
{ {
*maxvars *= 2; *maxvars *= 2;
*varnames = (char **) realloc(*varnames, *varnames = (char **) pg_realloc(*varnames,
((*maxvars) + 1) * sizeof(char *)); ((*maxvars) + 1) * sizeof(char *));
if (!(*varnames))
{
psql_error("out of memory\n");
exit(EXIT_FAILURE);
}
} }
(*varnames)[(*nvars)++] = psprintf("%s%s%s", prefix, varname, suffix); (*varnames)[(*nvars)++] = psprintf("%s%s%s", prefix, varname, suffix);