[COMMITTERS] pgsql: Improve dubious memory management inpg_newlocale_from_collation - Mailing list pgsql-committers

From Tom Lane
Subject [COMMITTERS] pgsql: Improve dubious memory management inpg_newlocale_from_collation
Date
Msg-id E1dujAx-0001YA-LS@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Improve dubious memory management in pg_newlocale_from_collation().

pg_newlocale_from_collation() used malloc() and strdup() directly,
which is generally not per backend coding style, and it didn't bother
to check for failure results, but would just SIGSEGV instead.  Also,
if one of the numerous error checks in the middle of the function
failed, the already-allocated memory would be leaked permanently.
Admittedly, it's not a lot of memory, but it could build up if this
function were called repeatedly for a bad collation.

The first two problems are easily cured by palloc'ing in TopMemoryContext
instead of calling libc directly.  We can fairly easily dodge the leakage
problem for the struct pg_locale_struct by filling in a temporary variable
and allocating permanent storage only once we reach the bottom of the
function.  It's harder to get rid of the potential leakage for ICU's copy
of the collcollate string, but at least that's only allocated after most
of the error checks; so live with that aspect.

Back-patch to v10 where this code came in, with one or another of the
ICU patches.

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/97514bf88bd96a4f213fbe6ae6911ba1dd033b8b

Modified Files
--------------
src/backend/utils/adt/pg_locale.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)


--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: Re: [COMMITTERS] pgsql: Add basic TAP test setup for pg_upgrade
Next
From: Robert Haas
Date:
Subject: [COMMITTERS] pgsql: Associate partitioning information with each RelOptInfo.