postgrespro.git / summary / log / commit / refs

commit    c06e3550dc4163c3ff29a87283b605f0beb50bed
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Tue Apr 23 14:51:07 2019 +0000

    Don't request pretty-printed output from xmlNodeDump().
    
    xml.c passed format = 1 to xmlNodeDump(), resulting in sometimes getting
    extra whitespace (newlines + spaces) in the output.  We don't really want
    that, first because whitespace might be semantically significant in some
    XML uses, and second because it happens only very inconsistently.  Only
    one case in our regression tests is affected.
    
    This potentially affects the results of xpath() and the XMLTABLE construct,
    when emitting nodeset values.
    
    Note that the older code in contrib/xml2 doesn't do this; it seems
    to have been an aboriginal bad decision in commit ea3b212fe.
    
    While this definitely seems like a bug to me, the small number of
    complaints to date argues against back-patching a behavioral change.
    Hence, fix in HEAD only, at least for now.
    
    Per report from Jean-Marc Voillequin.
    
    Discussion: https://postgr.es/m/1EC8157EB499BF459A516ADCF135ADCE3A23A9CA@LON-WGMSX712.ad.moodys.net


src/backend/utils/adt/xml.c | 2 +- src/test/regress/expected/xml.out | 9 +++------ src/test/regress/expected/xml_2.out | 9 +++------ 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index dae7d5883b..48b8034f8d 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -3857,7 +3857,7 @@ xml_xmlnodetoxmltype(xmlNodePtr cur, PgXmlErrorContext *xmlerrcxt) nodefree = (cur_copy->type == XML_DOCUMENT_NODE) ? (void (*) (xmlNodePtr)) xmlFreeDoc : xmlFreeNode; - bytes = xmlNodeDump(buf, NULL, cur_copy, 0, 1); + bytes = xmlNodeDump(buf, NULL, cur_copy, 0, 0); if (bytes == -1 || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_OUT_OF_MEMORY, "could not dump node"); diff --git a/src/test/regress/expected/xml.out b/src/test/regress/expected/xml.out index 0aae60016b..11e7d7faf3 100644 --- a/src/test/regress/expected/xml.out +++ b/src/test/regress/expected/xml.out @@ -654,12 +654,9 @@ SELECT xpath('//loc:piece', '<local:data xmlns:local="http://127.0.0.1"><local:p (1 row) SELECT xpath('//loc:piece', '<local:data xmlns:local="http://127.0.0.1" xmlns="http://127.0.0.2"><local:piece id="1"><internal>number one</internal><internal2/></local:piece><local:piece id="2" /></local:data>', ARRAY[ARRAY['loc', 'http://127.0.0.1']]); - xpath --------------------------------------------------------------------------------------- - {"<local:piece xmlns:local=\"http://127.0.0.1\" xmlns=\"http://127.0.0.2\" id=\"1\">+ - <internal>number one</internal> + - <internal2/> + - </local:piece>","<local:piece xmlns:local=\"http://127.0.0.1\" id=\"2\"/>"} + xpath +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + {"<local:piece xmlns:local=\"http://127.0.0.1\" xmlns=\"http://127.0.0.2\" id=\"1\"><internal>number one</internal><internal2/></local:piece>","<local:piece xmlns:local=\"http://127.0.0.1\" id=\"2\"/>"} (1 row) SELECT xpath('//b', '<a>one <b>two</b> three <b>etc</b></a>'); diff --git a/src/test/regress/expected/xml_2.out b/src/test/regress/expected/xml_2.out index 9756b6e886..4d20027469 100644 --- a/src/test/regress/expected/xml_2.out +++ b/src/test/regress/expected/xml_2.out @@ -634,12 +634,9 @@ SELECT xpath('//loc:piece', '<local:data xmlns:local="http://127.0.0.1"><local:p (1 row) SELECT xpath('//loc:piece', '<local:data xmlns:local="http://127.0.0.1" xmlns="http://127.0.0.2"><local:piece id="1"><internal>number one</internal><internal2/></local:piece><local:piece id="2" /></local:data>', ARRAY[ARRAY['loc', 'http://127.0.0.1']]); - xpath --------------------------------------------------------------------------------------- - {"<local:piece xmlns:local=\"http://127.0.0.1\" xmlns=\"http://127.0.0.2\" id=\"1\">+ - <internal>number one</internal> + - <internal2/> + - </local:piece>","<local:piece xmlns:local=\"http://127.0.0.1\" id=\"2\"/>"} + xpath +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + {"<local:piece xmlns:local=\"http://127.0.0.1\" xmlns=\"http://127.0.0.2\" id=\"1\"><internal>number one</internal><internal2/></local:piece>","<local:piece xmlns:local=\"http://127.0.0.1\" id=\"2\"/>"} (1 row) SELECT xpath('//b', '<a>one <b>two</b> three <b>etc</b></a>'); [parent: ccae190b916f]