Fix handling of namespace nodes in xpath() (xml)
Michael Paquier <michael@paquier.xyz>
Fix handling of namespace nodes in xpath() (xml)
xpath() attempted to call xmlCopyNode() and xmlNodeDump() on a
XML_NAMESPACE_DECL, finishing with a confusing error:
=# SELECT xpath('//namespace::foo', '<root xmlns:foo="http://127.0.0.1"/>');
ERROR: 53200: could not copy node
CONTEXT: SQL function "xpath" statement 1
xpath() is changed so as it goes through xmlXPathCastNodeToString()
instead, that is able to handle namespace nodes. xml2 uses the same
solution. This issue has been discovered while digging into
9d33a5a804db.
Author: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/aioT7ui_ZJ9RMlfM@paquier.xyz
Backpatch-through: 14
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/utils/adt/xml.c | modified | +3 −1 |
| src/test/regress/expected/xml_1.out | modified | +6 −0 |
| src/test/regress/expected/xml.out | modified | +6 −0 |
| src/test/regress/sql/xml.sql | modified | +1 −0 |
Discussion
- [PATCH] contrib/xml2: backend crash in xpath_nodeset() on the namespace axis 4 messages · 2026-06-11 → 2026-06-12