pgsql: Fix minor violations of FunctionCallInvoke usage protocol. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix minor violations of FunctionCallInvoke usage protocol.
Date
Msg-id E1jQxZE-0001xe-P9@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix minor violations of FunctionCallInvoke usage protocol.

Working on commit 1c455078b led me to check through FunctionCallInvoke
call sites to see if every one was being honest about (a) making sure
that fcinfo.isnull is initially false, and (b) checking its state after
the call.  Sure enough, I found some violations.

The main one is that finalize_partialaggregate re-used serialfn_fcinfo
without resetting isnull, even though it clearly intends to cater for
serialfns that return NULL.  There would only be an issue with a
non-strict serialfn, since it's unlikely that a serialfn would return
NULL for non-null input.  We have no non-strict serialfns in core, and
there may be none in the wild either, which would account for the lack
of complaints.  Still, it's clearly wrong, so back-patch that fix to
9.6 where finalize_partialaggregate was introduced.

Also, arrayfuncs.c and rowtypes.c contained various callers that were
not bothering to check for result nulls.  While what's being called is
a comparison or hash function that probably *shouldn't* return null,
that's a lousy excuse for not having any check at all.  There are
existing places that just Assert(!fcinfo->isnull) in comparable
situations, so I added that to the places that were calling btree
comparison or hash support functions.  In the places calling
boolean-returning equality functions, it's quite cheap to have them
treat isnull as FALSE, so make those places do that.  Also remove some
"locfcinfo->isnull = false" assignments that are unnecessary given the
assumption that no previous call returned null.  These changes seem like
mostly neatnik-ism or debugging support, so I didn't back-patch.

Branch
------
REL_10_STABLE

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

Modified Files
--------------
src/backend/executor/nodeAgg.c | 1 +
src/include/fmgr.h             | 5 +++++
2 files changed, 6 insertions(+)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Fix detaching partitions with cloned row triggers
Next
From: Tom Lane
Date:
Subject: pgsql: Fix possible crash during FATAL exit from reindexing.