pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: functions.c: copy trees from source_list before parse analysis e
Date: Fri, 04 Apr 2025 22:26:58 +0000
Message-ID: <E1u0pV4-002hiL-0V@gemulon.postgresql.org> (raw)

functions.c: copy trees from source_list before parse analysis etc.

This is yet another bit of fallout from the fact that backend/parser
(like other code) feels free to scribble on the parse tree it's
handed.  In this case that resulted in modifying the
relatively-short-lived copy in the cached function's source_list.
That would be fine since we only need each source_list tree once
... except that if the parser fails after making some changes,
the function cache entry remains as-is and will still be there
if the user tries to execute the function again.  Then we have
problems because we're feeding a non-pristine tree to the parser.

The most expedient fix is a quick copyObject().  I considered
other answers like somehow marking the cache entry invalid
temporarily, but that would add complexity and I'm not sure
it's worth it.  In typical scenarios we'd only do this once
per function query per session.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/6d442183-102c-498a-81d1-eeeb086cdc5a@gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0f43083d16f4be7c01efa80d05d0eef5e5ff69d3

Modified Files
--------------
src/backend/executor/functions.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)



Message-ID: <E1u0pV4-002hiL-0V@gemulon.postgresql.org>
Permalink:  ../E1u0pV4-002hiL-0V@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1u0pV4-002hiL-0V@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: functions.c: copy trees from source_list before parse analysis e
  In-Reply-To: <E1u0pV4-002hiL-0V@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox