Subject: | segfault in free() |
Hi,
I'm forwarding http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568382
"I'm now becoming convinced that this is a memory management issue
between Perl and libxslt - I think that both are trying to free the
same objects..." / "I'm guessing that this means it's possibly Perl's
garbage collection interfering?"
Of the attached samples, 568382a.pl runs ok, whereas 568382a1.pl with
only minimal changes ("push @keep, @_;" removed) causes a segfault.
Florian
Subject: | 568382a.pl |
#!/usr/bin/perl -w
use strict;
use warnings;
use XML::LibXSLT;
use XML::LibXML;
my $xslt = XML::LibXSLT->new();
my $ext_uri = "urn:local";
my @keep;
XML::LibXSLT->register_function($ext_uri, "uc", sub { push @keep, @_; return uc shift; } );
my $stylesheet = $xslt->parse_stylesheet(XML::LibXML->load_xml(string => <<'EOF'));
<xsl:stylesheet version="1.0"
extension-element-prefixes="exsl local"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:local="urn:local">
<xsl:template match="/">
<xsl:variable name="foo"><foo a="foo"/></xsl:variable>
<bar><xsl:value-of select="local:uc(exsl:node-set($foo)//@a)"/></bar>
</xsl:template>
</xsl:stylesheet>
EOF
my $input = XML::LibXML->load_xml(string => "<input/>");
print $stylesheet->transform($input)->toString;
# Next line crashes Perl
@keep = undef;
Subject: | 568382a1.pl |
#!/usr/bin/perl -w
use strict;
use warnings;
use XML::LibXSLT;
use XML::LibXML;
my $xslt = XML::LibXSLT->new();
my $ext_uri = "urn:local";
my @keep;
XML::LibXSLT->register_function($ext_uri, "uc", sub { return uc shift; } );
my $stylesheet = $xslt->parse_stylesheet(XML::LibXML->load_xml(string => <<'EOF'));
<xsl:stylesheet version="1.0"
extension-element-prefixes="exsl local"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:local="urn:local">
<xsl:template match="/">
<xsl:variable name="foo"><foo a="foo"/></xsl:variable>
<bar><xsl:value-of select="local:uc(exsl:node-set($foo)//@a)"/></bar>
</xsl:template>
</xsl:stylesheet>
EOF
my $input = XML::LibXML->load_xml(string => "<input/>");
print $stylesheet->transform($input)->toString;
# Next line crashes Perl
@keep = undef;