mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 05:21:27 +03:00
Fix use of already freed memory when dumping a database's security label.
pg_dump.c:dumDatabase() called ArchiveEntry() with the results of a a query that was PQclear()ed a couple lines earlier. Backpatch to 9.2 where security labels for shared objects where introduced.
This commit is contained in:
parent
c8ef5b1ace
commit
821386ab7e
@ -2112,25 +2112,29 @@ dumpDatabase(Archive *fout)
|
||||
dbCatId, 0, dbDumpId);
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
|
||||
/* Dump shared security label. */
|
||||
if (!no_security_labels && fout->remoteVersion >= 90200)
|
||||
{
|
||||
PQExpBuffer seclabelQry = createPQExpBuffer();
|
||||
PGresult *shres;
|
||||
PQExpBuffer seclabelQry;
|
||||
|
||||
seclabelQry = createPQExpBuffer();
|
||||
|
||||
buildShSecLabelQuery(conn, "pg_database", dbCatId.oid, seclabelQry);
|
||||
res = ExecuteSqlQuery(fout, seclabelQry->data, PGRES_TUPLES_OK);
|
||||
shres = ExecuteSqlQuery(fout, seclabelQry->data, PGRES_TUPLES_OK);
|
||||
resetPQExpBuffer(seclabelQry);
|
||||
emitShSecLabels(conn, res, seclabelQry, "DATABASE", datname);
|
||||
emitShSecLabels(conn, shres, seclabelQry, "DATABASE", datname);
|
||||
if (strlen(seclabelQry->data))
|
||||
ArchiveEntry(fout, dbCatId, createDumpId(), datname, NULL, NULL,
|
||||
dba, false, "SECURITY LABEL", SECTION_NONE,
|
||||
seclabelQry->data, "", NULL,
|
||||
&dbDumpId, 1, NULL, NULL);
|
||||
destroyPQExpBuffer(seclabelQry);
|
||||
PQclear(shres);
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
|
||||
destroyPQExpBuffer(dbQry);
|
||||
destroyPQExpBuffer(delQry);
|
||||
destroyPQExpBuffer(creaQry);
|
||||
|
Loading…
x
Reference in New Issue
Block a user