Security Advisories (2)
CVE-2006-10002 (2026-03-19)

XML::Parser versions through 2.45 for Perl could overflow the pre-allocated buffer size cause a heap corruption (double free or corruption) and crashes. A :utf8 PerlIO layer, parse_stream() in Expat.xs could overflow the XML input buffer because Perl's read() returns decoded characters while SvPV() gives back multi-byte UTF-8 bytes that can exceed the pre-allocated buffer size. This can cause heap corruption (double free or corruption) and crashes.

CVE-2006-10003 (2026-03-19)

XML::Parser versions through 2.47 for Perl has an off-by-one heap buffer overflow in st_serial_stack. In the case (stackptr == stacksize - 1), the stack will NOT be expanded. Then the new value will be written at location (++stackptr), which equals stacksize and therefore falls just outside the allocated buffer. The bug can be observed when parsing an XML file with very deep element nesting

Changes for version 2.22 - 1999-04-04

  • Loic Dachary <loic@ceic.com> reported a core dump with a small file with a comment that wasn't properly closed. Fixed in expat by updating positionPtr properly in final call of XML_Parse. (Reported to & acknowledged by James Clark.)
  • Made more fixes to Expat.xs position calculation.
  • Loic Dachary <loic@ceic.com> provided patches for fixing a memory growth problem with large documents. (Garbage collection wasn't happening frequently enough.)
  • As suggested by Gabe Beged-Dov <begeddov@jfinity.com>, added a non-blocking parse mechanism:
    • Added parse_start method to XML::Parser, which returns a XML::Parser::ExpatNB object.
    • Added XML::Parser::ExpatNB class, which is a subclass of Expat and has the additional methods parse_more & parse_done
  • Made some performance tweaks as suggested by performance thread on perl-xml discussion list. [With negligible results]
  • Tried to clarify Tree style structure in Parser pod

Modules

Lowlevel access to James Clark's expat XML parser
A perl module for parsing XML documents

Provides

in Parser.pm
in Expat/Expat.pm
in Expat/Expat.pm
in Parser.pm
in Parser.pm
in Parser.pm
in Parser.pm