pg_dump: Fix some minor memory leaks
authorPeter Eisentraut
Tue, 13 Mar 2012 19:34:54 +0000 (21:34 +0200)
committerPeter Eisentraut
Tue, 13 Mar 2012 19:36:43 +0000 (21:36 +0200)
Although we often don't care about freeing all memory in pg_dump,
these functions already freed the same memory in other code paths, so
we might as well do it consistently.

found by Coverity

src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dumpall.c

index d845c90ac828377fc0c3453abbc610f0e13c35ae..86d8a090624b24916df443275b763e936317313c 100644 (file)
@@ -3169,7 +3169,7 @@ getCollations(Archive *fout, int *numCollations)
    PGresult   *res;
    int         ntups;
    int         i;
-   PQExpBuffer query = createPQExpBuffer();
+   PQExpBuffer query;
    CollInfo   *collinfo;
    int         i_tableoid;
    int         i_oid;
@@ -3184,6 +3184,8 @@ getCollations(Archive *fout, int *numCollations)
        return NULL;
    }
 
+   query = createPQExpBuffer();
+
    /*
     * find all collations, including builtin collations; we filter out
     * system-defined collations at dump-out time.
@@ -6167,7 +6169,7 @@ getTSParsers(Archive *fout, int *numTSParsers)
    PGresult   *res;
    int         ntups;
    int         i;
-   PQExpBuffer query = createPQExpBuffer();
+   PQExpBuffer query;
    TSParserInfo *prsinfo;
    int         i_tableoid;
    int         i_oid;
@@ -6186,6 +6188,8 @@ getTSParsers(Archive *fout, int *numTSParsers)
        return NULL;
    }
 
+   query = createPQExpBuffer();
+
    /*
     * find all text search objects, including builtin ones; we filter out
     * system-defined objects at dump-out time.
@@ -6257,7 +6261,7 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
    PGresult   *res;
    int         ntups;
    int         i;
-   PQExpBuffer query = createPQExpBuffer();
+   PQExpBuffer query;
    TSDictInfo *dictinfo;
    int         i_tableoid;
    int         i_oid;
@@ -6274,6 +6278,8 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
        return NULL;
    }
 
+   query = createPQExpBuffer();
+
    /* Make sure we are in proper schema */
    selectSourceSchema(fout, "pg_catalog");
 
@@ -6340,7 +6346,7 @@ getTSTemplates(Archive *fout, int *numTSTemplates)
    PGresult   *res;
    int         ntups;
    int         i;
-   PQExpBuffer query = createPQExpBuffer();
+   PQExpBuffer query;
    TSTemplateInfo *tmplinfo;
    int         i_tableoid;
    int         i_oid;
@@ -6356,6 +6362,8 @@ getTSTemplates(Archive *fout, int *numTSTemplates)
        return NULL;
    }
 
+   query = createPQExpBuffer();
+
    /* Make sure we are in proper schema */
    selectSourceSchema(fout, "pg_catalog");
 
@@ -6415,7 +6423,7 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
    PGresult   *res;
    int         ntups;
    int         i;
-   PQExpBuffer query = createPQExpBuffer();
+   PQExpBuffer query;
    TSConfigInfo *cfginfo;
    int         i_tableoid;
    int         i_oid;
@@ -6431,6 +6439,8 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
        return NULL;
    }
 
+   query = createPQExpBuffer();
+
    /* Make sure we are in proper schema */
    selectSourceSchema(fout, "pg_catalog");
 
@@ -9467,16 +9477,18 @@ dumpCast(Archive *fout, CastInfo *cast)
            appendPQExpBuffer(defqry, "WITH INOUT");
            break;
        case COERCION_METHOD_FUNCTION:
+       {
+           char   *fsig = format_function_signature(fout, funcInfo, true);
 
            /*
             * Always qualify the function name, in case it is not in
             * pg_catalog schema (format_function_signature won't qualify it).
             */
-           appendPQExpBuffer(defqry, "WITH FUNCTION %s.",
-                             fmtId(funcInfo->dobj.namespace->dobj.name));
-           appendPQExpBuffer(defqry, "%s",
-                         format_function_signature(fout, funcInfo, true));
+           appendPQExpBuffer(defqry, "WITH FUNCTION %s.%s",
+                             fmtId(funcInfo->dobj.namespace->dobj.name), fsig);
+           free(fsig);
            break;
+       }
        default:
            write_msg(NULL, "WARNING: bogus value in pg_cast.castmethod field\n");
    }
index 4f8dd600686d9997c7518537f71458a6caf2b199..4100fca27dcca0f6dd93e095d81b93481d2074a3 100644 (file)
@@ -1525,12 +1525,17 @@ makeAlterConfigCommand(PGconn *conn, const char *arrayitem,
 {
    char       *pos;
    char       *mine;
-   PQExpBuffer buf = createPQExpBuffer();
+   PQExpBuffer buf;
 
    mine = pg_strdup(arrayitem);
    pos = strchr(mine, '=');
    if (pos == NULL)
+   {
+       free(mine);
        return;
+   }
+
+   buf = createPQExpBuffer();
 
    *pos = 0;
    appendPQExpBuffer(buf, "ALTER %s %s ", type, fmtId(name));