pgsql: Track nesting depth correctly when drilling down into RECORD Var

Started by Tom Lanealmost 3 years ago1 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Track nesting depth correctly when drilling down into RECORD Vars.

expandRecordVariable() failed to adjust the parse nesting structure
correctly when recursing to inspect an outer-level Var. This could
result in assertion failures or core dumps in corner cases.

Likewise, get_name_for_var_field() failed to adjust the deparse
namespace stack correctly when recursing to inspect an outer-level
Var. In this case the likely result was a "bogus varno" error
while deparsing a view.

Per bug #18077 from Jingzhou Fu. Back-patch to all supported
branches.

Richard Guo, with some adjustments by me

Discussion: /messages/by-id/18077-b9db97c6e0ab45d8@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/ae13f8166dc372a94e596f423790a67abd7bf68c

Modified Files
--------------
src/backend/parser/parse_target.c | 20 ++++++++----
src/backend/utils/adt/ruleutils.c | 37 ++++++++++++---------
src/test/regress/expected/rowtypes.out | 60 ++++++++++++++++++++++++++++++++++
src/test/regress/sql/rowtypes.sql | 25 ++++++++++++++
4 files changed, 120 insertions(+), 22 deletions(-)