#27236 [Opn->Fbk]: xsl:key has bad memory cleanup
| From: | sniper@php.net | Date: | Sat, 14 Feb 2004 15:59:27 +0000 |
| Subject: | #27236 [Opn->Fbk]: xsl:key has bad memory cleanup | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-54903@lists.php.net to get a copy of this message | ||
ID: 27236
Updated by: sniper@php.net
Reported By: bo at theaddedones dot com
-Status: Open
+Status: Feedback
Bug Type: XSLT related
Operating System: solaris 8, OSX 10.3, Redhat
PHP Version: 4.3.4
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
Can not reproduce with latest stable CVS snapshot,
using these libxml/libxslt versions:
libxml Version => 20604
libxslt Version => 1.0.32
Previous Comments:
------------------------------------------------------------------------
[2004-02-13 12:27:43] bo at theaddedones dot com
As one more note
i tried using the normal 'xsltproc' command built from the same libs
with the same inputs as the example and i get no error
------------------------------------------------------------------------
[2004-02-13 12:16:28] bo at theaddedones dot com
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
------------------------------------------------------------------------
[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-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