#27236 [Opn]: xsl:key has bad memory cleanup
| From: | bo at theaddedones dot com | Date: | Fri, 13 Feb 2004 17:16:29 +0000 |
| Subject: | #27236 [Opn]: xsl:key has bad memory cleanup | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-54870@lists.php.net to get a copy of this message | ||
ID: 27236
User updated by: bo at theaddedones dot com
Reported By: bo at theaddedones dot com
Status: Open
Bug Type: XSLT related
Operating System: solaris 8, OSX 10.3, Redhat
PHP Version: 4.3.4
New Comment:
i should mention that the versions on the different systems that the
error seems to appear on the
OSX 10.3 system is
php = 4.3.2 libxml = 20507, libxslt = 1.0.30
the verion on Solaris 8
php = 4.3.4, libxml = 20510, libxslt = 1.0.19
the version on Redhat 9
php 4.3.4, libxml = 20504, libxslt = 1.0.27
Previous Comments:
------------------------------------------------------------------------
[2004-02-13 12:08:16] bo at theaddedones dot com
here is compact code bit that seesms to give the error i speak of
----
<?php
$inSheet =
'<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:key name="state_key" match="images" use="state"/>
<xsl:template name="TestKey">
<xsl:for-each
select="//images[generate-id()=generate-id(key(\'state_key\',state)[1])]">
<xsl:value-of select="state"/>,
</xsl:for-each>
</xsl:template>
<xsl:template match="/" />
</xsl:stylesheet>';
$inXML = '<?xml version="1.0" encoding="ISO-8859-1"?>
<images>
<author>Karl Larsen</author>
<city>Culver City</city>
<state>CA</state>
<country>USA</country>
</images>';
$xsltString = domxml_xslt_stylesheet_doc(domxml_open_mem($inSheet));
$xmlString = domxml_open_mem($inXML);
$res = $xsltString->process($xmlString);
print $xsltString->result_dump_mem($res);
?>
------------------------------------------------------------------------
[2004-02-13 08:16:02] sniper@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc.
If possible, make the script source available online and provide
an URL to it here. Try avoid embedding huge scripts into the report.
------------------------------------------------------------------------
[2004-02-12 19:59:20] bo at theaddedones dot com
sorry,
in the 'reporduce code' the proper xsl would be (just mistyped it)
<xsl:key name="state_key" match="data" use="state"/>
<xsl:for-each
select="//data[generate-id()=generate-id(key('state_key',state)[1])]"><xsl:value-of
select="state"/>,
</xsl:for-each>
------------------------------------------------------------------------
[2004-02-12 19:55:30] bo at theaddedones dot com
Description:
------------
i have a slew of xml data that i need to select unique values from ...
the easiest method is via the xsl:key ...
when i ever i use xsl:key to make a key (regardless of if i use or not)
the xslt processor (libxml2 '20507', libxslt 1.0.30 -> 1.0.36 (the
versions i have tried)) i get an 'xmlFree' error IF i compiled the
libxml with the debug-mem option...if not i crashes the Apache (1.3.29)
child via a bus error...
the error....
Warning: Unknown(): Memory tag error occurs :0x6637671 bye in Unknown
on line 0
Warning: Unknown(): xmlMemFree(6637691) error in Unknown on line 0
Warning: Unknown(): xmlMallocBreakpoint reached on block 0 in Unknown
on line 0
interestingly, the entire XSL process works fine, and returns a
properly converted document (even the keys work properly), it jsut dies
with the memory error..i'm guessing something funny with garbage
colleciton
Reproduce code:
---------------
the below should dump all the unique states in my data as a comma
separated list
<xsl:key name="state_key" match="images" use="state"/>
<xsl:for-each
select="//data[generate-id()=generate-id(key('state_key',state)[1])]"><xsl:value-of
select="state"/>,
</xsl:for-each>
save as a normal xslt file
try to compile using dom ala
domxml_xslt_stylesheet_file({your file})...
create some XML, and process the beast via 'process' you shall see the
error
Expected result:
----------------
no silly memmory failures
Actual result:
--------------
Warning: Unknown(): Memory tag error occurs :0x6637671 bye in Unknown
on line 0
Warning: Unknown(): xmlMemFree(6637691) error in Unknown on line 0
Warning: Unknown(): xmlMallocBreakpoint reached on block 0 in Unknown
on line 0
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27236&edit=1