From a03b3b6b4a7275a66e38280f49fddb9aec8dff3d Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Fri, 24 Mar 2023 08:47:51 -0700 Subject: [PATCH] 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 --- src/backend/utils/adt/pg_locale.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 41b0e9fe691..386768ee767 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -2810,9 +2810,12 @@ icu_set_collation_attributes(UCollator *collator, const char *loc) * message across ICU versions. */ if (U_FAILURE(status)) + { + ucol_close(collator); ereport(ERROR, (errmsg("could not open collator for locale \"%s\": %s", loc, u_errorName(status)))); + } } }