Don't leak malloc'd strings when a GUC setting is rejected.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Mar 2021 02:09:41 +0000 (22:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Mar 2021 02:22:47 +0000 (22:22 -0400)
commit377b7a83007d277d32ef19f7c7590c8668d504cb
treef541fd99372b0b0921b72308e13e24cdbabf2883
parentd303849b059c3c315e5a8d4239016f8328f3296c
Don't leak malloc'd strings when a GUC setting is rejected.

Because guc.c prefers to keep all its string values in malloc'd
not palloc'd storage, it has to be more careful than usual to
avoid leaks.  Error exits out of string GUC hook checks failed
to clear the proposed value string, and error exits out of
ProcessGUCArray() failed to clear the malloc'd results of
ParseLongOption().

Found via valgrind testing.
This problem is ancient, so back-patch to all supported branches.

Discussion: https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us
src/backend/utils/misc/guc.c