]> granicus.if.org Git - postgresql/commitdiff
pg_dump: Fix some minor memory leaks
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 13 Mar 2012 19:34:54 +0000 (21:34 +0200)
committerPeter Eisentraut <peter_e@gmx.net>
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));