Commit cf22e851 authored by Tom Lane's avatar Tom Lane

Avoid platform-dependent infinite loop in pg_dump.

If malloc(0) returns NULL, the binary search in findSecLabels() will
probably go into an infinite loop when there are no security labels,
because NULL-1 is greater than NULL after wraparound.

(We've seen this pathology before ... I wonder whether there's a way to
detect the class of bugs automatically?)

Diagnosis and patch by Steve Singer, cosmetic adjustments by me
parent 409b8c75
......@@ -645,9 +645,10 @@ main(int argc, char **argv)
do_sql_command(g_conn, "SET quote_all_identifiers = true");
/*
* Disables security label support if server version < v9.1.x
* Disable security label support if server version < v9.1.x (prevents
* access to nonexistent pg_seclabel catalog)
*/
if (!no_security_labels && g_fout->remoteVersion < 90100)
if (g_fout->remoteVersion < 90100)
no_security_labels = 1;
/*
......@@ -11993,6 +11994,12 @@ findSecLabels(Archive *fout, Oid classoid, Oid objoid, SecLabelItem **items)
if (nlabels < 0)
nlabels = collectSecLabels(fout, &labels);
if (nlabels <= 0) /* no labels, so no match is possible */
{
*items = NULL;
return 0;
}
/*
* Do binary search to find some item matching the object.
*/
......
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