Re: Fix small psql slash option leaks

From: Junwang Zhao <zhjwpku(at)gmail(dot)com>
To: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Fix small psql slash option leaks
Date: 2026-08-12 12:01:26
Message-ID: CAEG8a3JUcsHiu6c_PqQgSW4JPQ6=rA0GX7UPj2cy4jo1nr8=OA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Fujii,

On Wed, Aug 12, 2026 at 11:12 AM Fujii Masao <masao(dot)fujii(at)gmail(dot)com> wrote:
>
> Hi,
>
> Attached is a small patch that fixes a few cases where the result of
> psql_scan_slash_option() was not freed.
>
> psql_scan_slash_option() returns a malloc'd string, and most callers
> either free it directly or transfer ownership to longer-lived psql
> state. But there seems a few exceptions.
>
> The patch covers the meta-commands: \getresults, \gset in pipeline mode,
> \restrict, and \unrestrict.
>
> I don't think these are severe leaks. The leaked object is just the
> string returned by psql_scan_slash_option(), so the amount is small in
> typical use and is reclaimed when the psql process exits. However, the
> leak can accumulate in a long-running interactive psql session if these
> are repeatedly exercised. Since nearby callers generally free
> these strings explicitly, it seems worthwhile to make these cases
> consistent as well.
>
> I'm thinking of backpatching this to all supported versions. In v17 and
> older, only the \restrict and \unrestrict cases apply, so those
> branches would need only that part of the fix.
>
> Thought?
>
> Regards,
>
> --
> Fujii Masao

Could psql_scan_slash_option() return the static oom_buffer when
initPQExpBuffer() fails while parsing a quoted option? If so, the
caller's free() would be invalid.

--
Regards
Junwang Zhao

In response to

Browse pgsql-hackers by date

  From Date Subject
Previous Message Amit Kapila 2026-08-12 11:57:08 Re: Missing list_free in publicationcmds.c:OpenTableList