Commit d74ecbc8 authored by Stephen Frost's avatar Stephen Frost

Protect against NULL-dereference in pg_dump

findTableByOid() is allowed to return NULL and we should therefore be
checking for that case.  getOwnedSeqs() and dumpSequence() shouldn't
ever actually see this happen, but given odd circumstances it might and
commit f9e439b1 probably shouldn't have removed that check.

Pointed out by Coverity.  Initial patch from Michael Paquier.

Back-patch to 9.6, where that commit had removed the check.
parent c52d37c8
...@@ -5643,6 +5643,9 @@ getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables) ...@@ -5643,6 +5643,9 @@ getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables)
continue; /* not an owned sequence */ continue; /* not an owned sequence */
owning_tab = findTableByOid(seqinfo->owning_tab); owning_tab = findTableByOid(seqinfo->owning_tab);
if (owning_tab == NULL)
exit_horribly(NULL, "failed sanity check, parent table OID %u of sequence OID %u not found\n",
seqinfo->owning_tab, seqinfo->dobj.catId.oid);
/* /*
* We need to dump the components that are being dumped for the table * We need to dump the components that are being dumped for the table
...@@ -15583,7 +15586,11 @@ dumpSequence(Archive *fout, TableInfo *tbinfo) ...@@ -15583,7 +15586,11 @@ dumpSequence(Archive *fout, TableInfo *tbinfo)
{ {
TableInfo *owning_tab = findTableByOid(tbinfo->owning_tab); TableInfo *owning_tab = findTableByOid(tbinfo->owning_tab);
if (owning_tab && owning_tab->dobj.dump & DUMP_COMPONENT_DEFINITION) if (owning_tab == NULL)
exit_horribly(NULL, "failed sanity check, parent table OID %u of sequence OID %u not found\n",
tbinfo->owning_tab, tbinfo->dobj.catId.oid);
if (owning_tab->dobj.dump & DUMP_COMPONENT_DEFINITION)
{ {
resetPQExpBuffer(query); resetPQExpBuffer(query);
appendPQExpBuffer(query, "ALTER SEQUENCE %s", appendPQExpBuffer(query, "ALTER SEQUENCE %s",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment