Avoid multiple free_struct_lconv() calls on same data.
authorTom Lane <[email protected]>
Mon, 29 Feb 2016 04:39:20 +0000 (23:39 -0500)
committerTom Lane <[email protected]>
Mon, 29 Feb 2016 04:40:21 +0000 (23:40 -0500)
commit0c4457de8b8a6aa715bdfe94ecfa8ee3d48e2827
tree109a9256b44a12cb3ae79f212cb71fe0615b88b0
parent8fed3cc225a24c3c5a22cbf7afd9bd8615dcaf2d
Avoid multiple free_struct_lconv() calls on same data.

A failure partway through PGLC_localeconv() led to a situation where
the next call would call free_struct_lconv() a second time, leading
to free() on already-freed strings, typically leading to a core dump.
Add a flag to remember whether we need to do that.

Per report from Thom Brown.  His example case only provokes the failure
as far back as 9.4, but nonetheless this code is obviously broken, so
back-patch to all supported branches.
src/backend/utils/adt/pg_locale.c