pgsql: Fix Assert failure in XMLTABLE parser
Fix Assert failure in XMLTABLE parser
In an XMLTABLE expression, columns can be marked NOT NULL, and the
parser internally fabricates an option named "is_not_null" to
represent this. However, the parser also allows users to specify
arbitrary option names. This creates a conflict: a user can
explicitly use "is_not_null" as an option name and assign it a
non-Boolean value, which violates internal assumptions and triggers an
assertion failure.
To fix, this patch checks whether a user-supplied name collides with
the internally reserved option name and raises an error if so.
Additionally, the internal name is renamed to "__pg__is_not_null" to
further reduce the risk of collision with user-defined names.
Reported-by: Евгений Горбанев <gorbanyoves@basealt.ru>
Author: Richard Guo <guofenglinux@gmail.com>
Reviewed-by: Alvaro Herrera <alvherre@kurilemu.de>
Discussion: /messages/by-id/6bac9886-65bf-4cec-96bd-e304159f28db@basealt.ru
Backpatch-through: 15
Branch
------
REL_15_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/666103090f1d18e26388aef1ee5840d86cb8604b
Modified Files
--------------
src/backend/parser/gram.y | 15 +++++++++++----
src/test/regress/expected/xml.out | 4 ++++
src/test/regress/expected/xml_1.out | 4 ++++
src/test/regress/expected/xml_2.out | 4 ++++
src/test/regress/sql/xml.sql | 2 ++
5 files changed, 25 insertions(+), 4 deletions(-)