mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Fix parsetree representation of XMLTABLE(XMLNAMESPACES(DEFAULT ...)).
The original coding for XMLTABLE thought it could represent a default namespace by a T_String Value node with a null string pointer. That's not okay, though; in particular outfuncs.c/readfuncs.c are not on board with such a representation, meaning you'll get a null pointer crash if you try to store a view or rule containing this construct. To fix, change the parsetree representation so that we have a NULL list element, instead of a bogus Value node. This isn't really a functional limitation since default XML namespaces aren't yet implemented in the executor; you'd just get "DEFAULT namespace is not supported" anyway. But crashes are not nice, so back-patch to v10 where this syntax was added. Ordinarily we'd consider a parsetree representation change to be un-backpatchable; but since existing releases would crash on the way to storing such constructs, there can't be any existing views/rules to be incompatible with. Per report from Andrey Lepikhov. Discussion: https://postgr.es/m/3690074f-abd2-56a9-144a-aa5545d7a291@postgrespro.ru
This commit is contained in:
@@ -75,12 +75,15 @@ typedef struct RangeVar
|
||||
|
||||
/*
|
||||
* TableFunc - node for a table function, such as XMLTABLE.
|
||||
*
|
||||
* Entries in the ns_names list are either string Value nodes containing
|
||||
* literal namespace names, or NULL pointers to represent DEFAULT.
|
||||
*/
|
||||
typedef struct TableFunc
|
||||
{
|
||||
NodeTag type;
|
||||
List *ns_uris; /* list of namespace uri */
|
||||
List *ns_names; /* list of namespace names */
|
||||
List *ns_uris; /* list of namespace URI expressions */
|
||||
List *ns_names; /* list of namespace names or NULL */
|
||||
Node *docexpr; /* input document expression */
|
||||
Node *rowexpr; /* row filter expression */
|
||||
List *colnames; /* column names (list of String) */
|
||||
|
Reference in New Issue
Block a user