Avoid potential UCollator leak for older ICU versions.

ICU versions 53 and earlier rely on icu_set_collation_attributes() to
process the attributes in the locale string. Avoid leaking the
already-opened UCollator object if an error is encountered.

Discussion: https://postgr.es/m/04182066-7655-344a-b8b7-040b1b2490fb%40enterprisedb.com
Reviewed-by: Peter Eisentraut
pull/137/head
Jeff Davis 3 years ago
parent 9a24289915
commit a03b3b6b4a
  1. 3
      src/backend/utils/adt/pg_locale.c

@ -2810,9 +2810,12 @@ icu_set_collation_attributes(UCollator *collator, const char *loc)
* message across ICU versions. * message across ICU versions.
*/ */
if (U_FAILURE(status)) if (U_FAILURE(status))
{
ucol_close(collator);
ereport(ERROR, ereport(ERROR,
(errmsg("could not open collator for locale \"%s\": %s", (errmsg("could not open collator for locale \"%s\": %s",
loc, u_errorName(status)))); loc, u_errorName(status))));
}
} }
} }

Loading…
Cancel
Save