]> granicus.if.org Git - postgresql/commitdiff
Fix more memory leaks in failure path in buildACLCommands.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 11 Feb 2015 23:35:23 +0000 (18:35 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 11 Feb 2015 23:35:23 +0000 (18:35 -0500)
We already had one go at this issue in commit d73b7f973db5ec7e, but we
failed to notice that buildACLCommands also leaked several PQExpBuffers
along with a simply malloc'd string.  This time let's try to make the
fix a bit more future-proof by eliminating the separate exit path.

It's still not exactly critical because pg_dump will curl up and die on
failure; but since the amount of the potential leak is now several KB,
it seems worth back-patching as far as 9.2 where the previous fix landed.

Per Coverity, which evidently is smarter than clang's static analyzer.

src/bin/pg_dump/dumputils.c

index 55509866ff5c692288e8b31074a6912020b381ca..095c50770ba1992734bf5b7b0ceb7d3c699a3651 100644 (file)
@@ -500,6 +500,7 @@ buildACLCommands(const char *name, const char *subname,
                                 const char *prefix, int remoteVersion,
                                 PQExpBuffer sql)
 {
+       bool            ok = true;
        char      **aclitems;
        int                     naclitems;
        int                     i;
@@ -570,8 +571,8 @@ buildACLCommands(const char *name, const char *subname,
                if (!parseAclItem(aclitems[i], type, name, subname, remoteVersion,
                                                  grantee, grantor, privs, privswgo))
                {
-                       free(aclitems);
-                       return false;
+                       ok = false;
+                       break;
                }
 
                if (grantor->len == 0 && owner)
@@ -678,7 +679,7 @@ buildACLCommands(const char *name, const char *subname,
 
        free(aclitems);
 
-       return true;
+       return ok;
 }
 
 /*