mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-07 19:47:50 +08:00
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
This commit is contained in:
parent
409b8c75ba
commit
cf22e851b6
@ -645,9 +645,10 @@ main(int argc, char **argv)
|
|||||||
do_sql_command(g_conn, "SET quote_all_identifiers = true");
|
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;
|
no_security_labels = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -11993,6 +11994,12 @@ findSecLabels(Archive *fout, Oid classoid, Oid objoid, SecLabelItem **items)
|
|||||||
if (nlabels < 0)
|
if (nlabels < 0)
|
||||||
nlabels = collectSecLabels(fout, &labels);
|
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.
|
* Do binary search to find some item matching the object.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user