contrib/xml2 pfree bug

Started by Andrew Dunstanover 16 years ago6 messages
#1Andrew Dunstan
andrew@dunslane.net

Didn't we just clean up a mess in our XML handling to do with memory
handlers? It looks like contrib/xml2 might have similar problems. Here's
the relevant part of a back trace from a core dump:

Program terminated with signal 11, Segmentation fault.
#0 0x000000000069300a in pfree ()
(gdb) bt
#0 0x000000000069300a in pfree ()
#1 0x000000356c42e0ee in xmlCleanupCharEncodingHandlers () from
/usr/lib64/libxml2.so.2
#2 0x000000356c436675 in xmlCleanupParser () from /usr/lib64/libxml2.so.2
#3 0x00002aaab072c5b6 in xslt_process () from
/bk/xxxx/dbinst-84/lib/postgresql/pgxml.so

this was generated from the following call (XML afficionados will
realise I was trying to pretty print the XML):

select xslt_process( cb_ob_invoice_xml(1,1)::text,
$$<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform&quot;&gt;

<xsl:output method="xml" indent="yes" />

<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()">
<xsl:copy />
</xsl:template>

</xsl:stylesheet>
$$::text
);

cheers

andrew

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#1)
Re: contrib/xml2 pfree bug

Andrew Dunstan <andrew@dunslane.net> writes:

Didn't we just clean up a mess in our XML handling to do with memory
handlers? It looks like contrib/xml2 might have similar problems.

Yeah, it's using xmlMemSetup(), and being even less careful than the
core code was :-(.

Do we feel like fixing it, or is it time to rip it out?

regards, tom lane

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#2)
Re: contrib/xml2 pfree bug

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Didn't we just clean up a mess in our XML handling to do with memory
handlers? It looks like contrib/xml2 might have similar problems.

Yeah, it's using xmlMemSetup(), and being even less careful than the
core code was :-(.

Do we feel like fixing it, or is it time to rip it out?

Well, we don't have an XSLT processor in core code. If we get one, we
should rip this module out from HEAD. But this is a bug in released code
- we don't want to rip that out, right? It works OK in some
circumstances, but crashing it was trivially easy.

cheers

andrew

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#1)
Re: contrib/xml2 pfree bug

Andrew Dunstan <andrew@dunslane.net> writes:

Didn't we just clean up a mess in our XML handling to do with memory
handlers? It looks like contrib/xml2 might have similar problems.

BTW, I couldn't duplicate this because I don't know what
cb_ob_invoice_xml(1,1) refers to. Can you provide a self-contained
example?

regards, tom lane

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#4)
Re: contrib/xml2 pfree bug

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Didn't we just clean up a mess in our XML handling to do with memory
handlers? It looks like contrib/xml2 might have similar problems.

BTW, I couldn't duplicate this because I don't know what
cb_ob_invoice_xml(1,1) refers to. Can you provide a self-contained
example?

Almost any XML will do for the first param. e.g.:

select xslt_process( query_to_xml('select x from generate_series(1,5) as
x',true,false,'')::text,
$$<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform&quot;&gt;
<xsl:output method="xml" indent="yes" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()">
<xsl:copy />
</xsl:template>
</xsl:stylesheet>
$$::text);

cheers

andrew

#6Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#5)
Re: contrib/xml2 pfree bug

Andrew Dunstan wrote:

Almost any XML will do for the first param. e.g.:

It looks like you need to make sure the XML library is called first to
induce the crash, so before doing what's below, do:

select query_to_xml('select 1 as x',true,false,''):

select xslt_process( query_to_xml('select x from generate_series(1,5)
as x',true,false,'')::text,
$$<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform&quot;&gt;
<xsl:output method="xml" indent="yes" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()">
<xsl:copy />
</xsl:template>
</xsl:stylesheet>
$$::text);

cheers

andrew