Fix erroneous space calculation leading to core dump in dumpProcLangs,
authorTom Lane
Sat, 3 May 2003 22:18:59 +0000 (22:18 +0000)
committerTom Lane
Sat, 3 May 2003 22:18:59 +0000 (22:18 +0000)
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.

src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_dump.c

index 1ef3f371f4a3d8ecb9ec5e565686cbb8c93b9821..df8e09c3d28ccf4f16780f80550b7470cf51b0ac 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * 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;
            do
            {
-               if (depIdx > depSize)
+               if (depIdx >= depSize)
                {
                    depSize *= 2;
                    deps = realloc(deps, sizeof(char *) * depSize);
@@ -1932,7 +1932,10 @@ ReadToc(ArchiveHandle *AH)
            if (depIdx > 1)     /* We have a non-null entry */
                te->depOid = realloc(deps, sizeof(char *) * depIdx);    /* trim it */
            else
+           {
+               free(deps);
                te->depOid = NULL;      /* no deps */
+           }
        }
        else
            te->depOid = NULL;
index 84cf3950ec1004d4e727750001f0e34a8756688c..6de655b6cd13b5526358b9b52ebb07811ba1711b 100644 (file)
@@ -12,7 +12,7 @@
  * by PostgreSQL
  *
  * 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);
 
        /* 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;
 
        (*deps)[depIdx++] = strdup(lanplcallfoid);