Fix erroneous space calculation leading to core dump in dumpProcLangs,

per report from Olivier Prenant.  Also fix off-by-one space calculation
in ReadToc; this woould not have hurt us until we had more than 100
dependencies for a single object, but wrong is wrong.
This commit is contained in:
Tom Lane 2003-05-03 22:18:59 +00:00
parent 5295fffc26
commit 228697179a
2 changed files with 7 additions and 4 deletions

View File

@ -15,7 +15,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.70 2003/03/10 22:28:19 tgl Exp $ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.71 2003/05/03 22:18:59 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1916,7 +1916,7 @@ ReadToc(ArchiveHandle *AH)
depIdx = 0; depIdx = 0;
do do
{ {
if (depIdx > depSize) if (depIdx >= depSize)
{ {
depSize *= 2; depSize *= 2;
deps = realloc(deps, sizeof(char *) * depSize); deps = realloc(deps, sizeof(char *) * depSize);
@ -1932,7 +1932,10 @@ ReadToc(ArchiveHandle *AH)
if (depIdx > 1) /* We have a non-null entry */ if (depIdx > 1) /* We have a non-null entry */
te->depOid = realloc(deps, sizeof(char *) * depIdx); /* trim it */ te->depOid = realloc(deps, sizeof(char *) * depIdx); /* trim it */
else else
{
free(deps);
te->depOid = NULL; /* no deps */ te->depOid = NULL; /* no deps */
}
} }
else else
te->depOid = NULL; te->depOid = NULL;

View File

@ -12,7 +12,7 @@
* by PostgreSQL * by PostgreSQL
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.327 2003/04/25 02:28:22 tgl Exp $ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.328 2003/05/03 22:18:59 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -3591,7 +3591,7 @@ dumpProcLangs(Archive *fout, FuncInfo finfo[], int numFuncs)
resetPQExpBuffer(delqry); resetPQExpBuffer(delqry);
/* Make a dependency to ensure function is dumped first */ /* Make a dependency to ensure function is dumped first */
deps = malloc(sizeof(char *) * (2 + (strcmp(lanvalidator, "0") != 0) ? 1 : 0)); deps = malloc(sizeof(char *) * 10);
depIdx = 0; depIdx = 0;
(*deps)[depIdx++] = strdup(lanplcallfoid); (*deps)[depIdx++] = strdup(lanplcallfoid);