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.
const char *prefix, int remoteVersion,
PQExpBuffer sql)
{
+ bool ok = true;
char **aclitems;
int naclitems;
int i;
if (!parseAclItem(aclitems[i], type, name, subname, remoteVersion,
grantee, grantor, privs, privswgo))
{
- free(aclitems);
- return false;
+ ok = false;
+ break;
}
if (grantor->len == 0 && owner)
free(aclitems);
- return true;
+ return ok;
}
/*