Package: libxml-xerces-perl
Version: 2.7.0-0-2
Severity: normal

When calling parse() on an XML::Xerces::XercesDOMParser that has a custom 
entity resolver set, perl will segfault.  I have created a simple example that 
can demonstrate the segfault.  To run, just save the driver, entity resolver, 
xml, and dtd code into 4 seperate files ( say, driver.pl, 
ConfEntityResolver.pm, Sample.xml, and Sample.dtd ).  Then run ./driver.pl 
Sample.xml

This will segfault and dump core.  A backtrace of the core ( gdb perl -c 
<corefile> ) shows:

#0  0xb785fa03 in xercesc_2_7::ReaderMgr::createReader () from 
/usr/lib/libxerces-c.so.27
#1  0xb786161f in xercesc_2_7::ReaderMgr::createReader () from 
/usr/lib/libxerces-c.so.27
#2  0xb782b8e4 in xercesc_2_7::IGXMLScanner::scanDocTypeDecl () from 
/usr/lib/libxerces-c.so.27
#3  0xb78f4e36 in xercesc_2_7::XMLScanner::scanProlog () from 
/usr/lib/libxerces-c.so.27
#4  0xb782f67f in xercesc_2_7::IGXMLScanner::scanDocument () from 
/usr/lib/libxerces-c.so.27
#5  0xb7783738 in xercesc_2_7::AbstractDOMParser::parse () from 
/usr/lib/libxerces-c.so.27
#6  0xb7aa16ef in _wrap_AbstractDOMParser_parse__SWIG_0 () from 
/usr/lib/perl5/auto/XML/Xerces/Xerces.so
#7  0xb7af71a6 in _wrap_AbstractDOMParser_parse () from 
/usr/lib/perl5/auto/XML/Xerces/Xerces.so
#8  0x080bdaa1 in Perl_pp_entersub ()
#9  0x080bc379 in Perl_runops_standard ()
#10 0x08063bfd in perl_run ()
#11 0x0805ffd1 in main ()


PERL DRIVER PROGRAM

#!/usr/bin/perl
use ConfEntityResolver;
use XML::Xerces;
use File::Spec;
use File::Basename;

my $Prog = basename($0);
die "Usage: $Prog xmlfile\n" unless scalar( @ARGV ) == 1;
my $Parser = XML::Xerces::XercesDOMParser->new();
$Parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Never);
my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new();
$Parser->setErrorHandler($ERROR_HANDLER);
my $Xml = $ARGV[0];
open( XML, $Xml ) || die "Can't open file '$XML'";
my $Contents = join( '', <XML> );
close( FILE );
my $Conf = $ARGV[1];
my $InputSource = XML::Xerces::LocalFileInputSource->new( $Xml );
my $InputSource = XML::Xerces::MemBufInputSource->new
( $Contents, length( $Contents ) );
my $EntityResolver =
ConfEntityResolver->new( {
                          SearchDirs =>
                          [ File::Basename::dirname( $Xml ) ]
                         } );
$Parser->setEntityResolver( $EntityResolver );
eval { $Parser->parse( $InputSource ) };


ENTITY RESOLVER PACKAGE

package ConfEntityResolver;
use vars qw( @ISA );

@ISA = qw( XML::Xerces::PerlEntityResolver );
sub new
{
  my $Proto = shift @_;
  my $Self = $Proto->SUPER::new();
  my $Args = shift @_;
  $Self->{SearchDirs} = $Args->{SearchDirs};
  return $Self;
}
sub resolve_entity
{
  my ( $Self, $PublicId, $SystemId ) = @_;
  print "Resolving $PublicId $SystemId\n";
  # Try the search directories in the order specified.
  foreach my $Directory ( @{ $Self->{SearchDirs} } )
  {
    my $TestPath = File::Spec->catfile( $Directory, $SystemId );
    if( -e $TestPath )
    { 
      print "Done Resolving $PublicId $SystemId\n";
      return XML::Xerces::LocalFileInputSource->new( $TestPath );
    }
  }
  die "Unable to locate Entity '$SystemId' search directories:"  .
    join( ":", @{ $Self->{SearchDirs} } ) . "\n";
  return undef;
}

1;


SAMPLE XML FILE

<?xml version="1.0" encoding="us-ascii" ?>
<!DOCTYPE Configuration SYSTEM "Sample.dtd" >
<Data>
 <SubData>SomeSubData</SubData>
</Data>

SAMPLE DTD

<?xml version="1.0" encoding="us-ascii" ?>
<!ELEMENT Data ( SubData )* >
<!ATTLIST Data list ( list ) "list" >

<!ELEMENT SubData ( #PCDATA )>
<!ATTLIST SubData Type ( string ) "string" >





-- System Information:
Debian Release: 4.0
  APT prefers oldstable
  APT policy: (900, 'oldstable'), (4, 'stable'), (3, 'testing'), (2, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.26-686-smp
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)

Versions of packages libxml-xerces-perl depends on:
ii  libc6               2.3.6.ds1-13etch9+b1 GNU C Library: Shared libraries
ii  libgcc1             1:4.1.1-21           GCC support library
ii  libxerces27         2.7.0-3              validating XML parser library for 
ii  perl                5.8.8-7etch6         Larry Wall's Practical Extraction 
ii  perl-base [perlapi- 5.8.8-7etch6         The Pathologically Eclectic Rubbis

libxml-xerces-perl recommends no packages.

-- no debconf information



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to