Re: Avoid resource leak (contrib/postgres_fdw/connection.c)
Matheus Alcantara <matheusssilv97@gmail.com>
From: "Matheus Alcantara" <matheusssilv97@gmail.com>
To: "Fujii Masao" <masao.fujii@gmail.com>, "Ranier Vilela"
<ranier.vf@gmail.com>
Cc: "Pg Hackers" <pgsql-hackers@postgresql.org>
Date: 2026-03-18T17:42:35Z
Lists: pgsql-hackers
On 16/03/26 20:07, Fujii Masao wrote: > On Mon, Mar 16, 2026 at 8:46 PM Ranier Vilela <ranier.vf@gmail.com> wrote: >> >> Hi. >> >> Per Coverity. >> >> CID 1645716: (#1 of 1): Resource leak (RESOURCE_LEAK) >> 8. leaked_storage: Variable str going out of scope leaks the storage str.data points to. >> >> The function *postgres_fdw_connection* leaks the contents of >> var str.data >> Once that function *cstring_to_text* palloc the contents >> must be necessary to free the var str.data. > > It seems that postgres_fdw_connection() is expected to be called by > ForeignServerConnectionString() via OidFunctionCall3(), > and to allocate memory (including str.data) in the FDWConnectionContext > memory context created by ForeignServerConnectionString(). > > After calling postgres_fdw_connection(), ForeignServerConnectionString() > deletes FDWConnectionContext. So it seems to me that any memory > allocated in that context, including str.data, would not leak. No? > Yeah, this sounds correct, but I'm wondering if the current pfree calls on postgres_fdw_connection() is needed? My previous review was assuming that any allocated memory on postgres_fdw_connection() should be free at the end because of these calls, but ForeignServerConnectionString() already assume that this function leak memory: /* * GetForeignServer, GetForeignDataWrapper, and the connection function * itself all leak memory into CurrentMemoryContext. Switch to a temporary * context for easy cleanup. */ tempContext = AllocSetContextCreate(CurrentMemoryContext, "FDWConnectionContext", ALLOCSET_SMALL_SIZES); -- Matheus Alcantara EDB: https://www.enterprisedb.com