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
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/fe29b2a1dab2b3d81e6c350679b7d9b0e1c8c850
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(-)