]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Fix handling of R/W expanded datums that are passed to SQL functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Aug 2022 17:37:25 +0000 (13:37 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Aug 2022 17:37:25 +0000 (13:37 -0400)
commit5b948b5c13366591ef0cd975df3170c4eaff4e3b
tree15bc4f7064923adbbeca7f1b026ba0123e148dd3
parent7cd0d523d2581895e65cd0ebebc7e50caa8bbfda
Fix handling of R/W expanded datums that are passed to SQL functions.

fmgr_sql must make expanded-datum arguments read-only, because
it's possible that the function body will pass the argument to
more than one callee function.  If one of those functions takes
the datum's R/W property as license to scribble on it, then later
callees will see an unexpected value, leading to wrong answers.

From a performance standpoint, it'd be nice to skip this in the
common case that the argument value is passed to only one callee.
However, detecting that seems fairly hard, and certainly not
something that I care to attempt in a back-patched bug fix.

Per report from Adam Mackler.  This has been broken since we
invented expanded datums, so back-patch to all supported branches.

Discussion: https://postgr.es/m/WScDU5qfoZ7PB2gXwNqwGGgDPmWzz08VdydcPFLhOwUKZcdWbblbo-0Lku-qhuEiZoXJ82jpiQU4hOjOcrevYEDeoAvz6nR0IU4IHhXnaCA=@mackler.email
Discussion: https://postgr.es/m/187436.1660143060@sss.pgh.pa.us
src/backend/executor/functions.c
src/test/regress/expected/create_function_3.out
src/test/regress/sql/create_function_3.sql