mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +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");
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user