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