From 93f9b4a93fef5dad585531692f53e42d6e9f7caf Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 14 Nov 2024 13:10:36 +0900 Subject: [PATCH] xml2: Add tests for functions xpath_nodeset() and xpath_list() These two functions with their different argument lists have never been tested in this module, so let's add something. Author: Ronan Dunklau Discussion: https://postgr.es/m/ZzMSJkiNZhimjXWx@paquier.xyz --- contrib/xml2/expected/xml2.out | 39 ++++++++++++++++++++++++++++++++ contrib/xml2/expected/xml2_1.out | 39 ++++++++++++++++++++++++++++++++ contrib/xml2/sql/xml2.sql | 16 +++++++++++++ 3 files changed, 94 insertions(+) diff --git a/contrib/xml2/expected/xml2.out b/contrib/xml2/expected/xml2.out index eba6ae60364..3d97b14c3a1 100644 --- a/contrib/xml2/expected/xml2.out +++ b/contrib/xml2/expected/xml2.out @@ -207,6 +207,45 @@ SELECT xslt_process('cim30400test37 +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'item_without_toptag') + FROM articles; + xpath_nodeset +------------------------------------------------------------------------------------------------------------------------------ + test37 +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'result', 'item') + FROM articles; + xpath_nodeset +----------------------------------------------------------------------------------- + test37 +(1 row) + +-- xpath_list() +SELECT xpath_list(article_xml::text, '/article/author|/article/pages') + FROM articles; + xpath_list +------------ + test,37 +(1 row) + +SELECT xpath_list(article_xml::text, '/article/author|/article/pages', '|') + FROM articles; + xpath_list +------------ + test|37 +(1 row) + -- possible security exploit SELECT xslt_process('Hello from XML', $$cim30400 $$::text, 'n1="v1",n2="v2",n3="v3",n4="v4",n5="v5",n6="v6",n7="v7",n8="v8",n9="v9",n10="v10",n11="v11",n12="v12"'::text); ERROR: xslt_process() is not available without libxslt +-- xpath_nodeset() +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages') + FROM articles; + xpath_nodeset +---------------------------------------- + test37 +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'item_without_toptag') + FROM articles; + xpath_nodeset +------------------------------------------------------------------------------------------------------------------------------ + test37 +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'result', 'item') + FROM articles; + xpath_nodeset +----------------------------------------------------------------------------------- + test37 +(1 row) + +-- xpath_list() +SELECT xpath_list(article_xml::text, '/article/author|/article/pages') + FROM articles; + xpath_list +------------ + test,37 +(1 row) + +SELECT xpath_list(article_xml::text, '/article/author|/article/pages', '|') + FROM articles; + xpath_list +------------ + test|37 +(1 row) + -- possible security exploit SELECT xslt_process('Hello from XML', $$cim30400 $$::text, 'n1="v1",n2="v2",n3="v3",n4="v4",n5="v5",n6="v6",n7="v7",n8="v8",n9="v9",n10="v10",n11="v11",n12="v12"'::text); +-- xpath_nodeset() +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages') + FROM articles; +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'item_without_toptag') + FROM articles; +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', + 'result', 'item') + FROM articles; + +-- xpath_list() +SELECT xpath_list(article_xml::text, '/article/author|/article/pages') + FROM articles; +SELECT xpath_list(article_xml::text, '/article/author|/article/pages', '|') + FROM articles; + -- possible security exploit SELECT xslt_process('Hello from XML', $$