pgsql: Fix tuple_data_split() to not open a relation without any lock. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix tuple_data_split() to not open a relation without any lock.
Date
Msg-id E1g70Tt-00044t-R3@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix tuple_data_split() to not open a relation without any lock.

contrib/pageinspect's tuple_data_split() function thought it could get
away with opening the referenced relation with NoLock.  In practice
there's no guarantee that the current session holds any lock on that
rel (even if we just read a page from it), so that this is unsafe.

Switch to using AccessShareLock.  Also, postpone closing the relation,
so that we needn't copy its tupdesc.  Also, fix unsafe use of
att_isnull() for attributes past the end of the tuple.

Per testing with a patch that complains if we open a relation without
holding any lock on it.  I don't plan to back-patch that patch, but we
should close the holes it identifies in all supported branches.

Discussion: https://postgr.es/m/2038.1538335244@sss.pgh.pa.us

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1f25c7a8fc99bb33a9b978ab92b9ba9840366753

Modified Files
--------------
contrib/pageinspect/heapfuncs.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: doc: Clarify CREATE TABLESPACE documentation
Next
From: Tom Lane
Date:
Subject: pgsql: Add assertions that we hold some relevant lock during relationo