XML-Parser
view release on metacpan or search on metacpan
- PR #225 Replace indirect object syntax in test files (t/decl.t,
t/parament.t, t/external_ent.t)
- PR #224 Add test coverage for IO control character rejection in
external entity paths
2.56 2026-04-02 (by Todd Rinaldo)
Fixes:
- PR #223 Skip original_string test when expat lacks
XML_CONTEXT_BYTES, fixing false test failures on platforms
where libexpat is compiled without XML_CONTEXT_BYTES (e.g.
DragonFlyBSD system expat)
2.55 2026-04-01 (by Todd Rinaldo)
Fixes:
- PR #221 Fix struct-return ABI mismatch in XML_ExpatVersionInfo()
by parsing the version string instead of using the struct return,
which was corrupted when Perl and libexpat used different struct
return conventions (-fpcc-struct-return vs -freg-struct-return)
- PR #214 GH #211 GH #212 GH #213 Revert defaulthandle char
routing and standalone string changes that broke downstream CPAN
modules (XML-Twig, XML-DOM, XML-XPath)
- PR #216 GH #215 Increase deep_nesting test depth from 600 to
2048 to actually exercise the st_serial_stack reallocation code
path (the GH #39 fix)
- PR #218 Update expat download URL from SourceForge to GitHub in
the "expat not found" error message
Improvements:
- PR #220 GH #215 Add AddressSanitizer CI job for XS memory safety
to catch heap buffer overflows and use-after-free bugs
Maintenance:
- PR #219 Modernize last 4 print-ok test files (astress, namespaces,
stream, skip) to Test::More with descriptive test names
- PR #217 Remove obsolete .travis.yml (project uses GitHub Actions)
2.54 2026-03-27 (by Todd Rinaldo)
Fixes:
- PR #196 Plug XS memory leaks on error paths in Expat.xs
(externalEntityRef, parse_stream, ParserCreate)
- PR #204 Add defensive NULL checks in Expat.xs to prevent crashes
on memory exhaustion and undefined behavior on short input lines
- PR #203 Add explicit package main after inline package declarations
in test files to clarify scope
Improvements:
- PR #207 GH #205 Add GitHub Actions workflow to auto-create GitHub
Releases on tag push, enabling downstream notification via
GitHub's release watch
- PR #209 Update AUTHORS POD in Parser.pm and Expat.pm to reflect
full maintainer history
- PR #210 Add CI badge to POD via =for markdown directive so it
survives README.md regeneration
- Rename README to README.md and regenerate from POD
Maintenance:
- PR #208 Modernize 10 legacy test files from print-ok style to
Test::More (cdata, finish, deep_nesting, xml_escape, partial,
char_end_doc, current_length, combine_chars, utf8_stream, defaulted)
2.53 2026-03-25 (by Todd Rinaldo)
Fixes:
- PR #202 GH #201 Fix detection of bare glob filehandles (*FH) in
Expat::parse; previously only glob references were recognized
Maintenance:
- PR #198 Modernize encoding.t from print-ok style to Test::More
and expand coverage
- PR #197 Modernize styles.t from Test to Test::More and expand
coverage
- Ignore Mac OS metadata files (.DS_Store) in .gitignore
2.52 2026-03-24 (by Todd Rinaldo)
Fixes:
- PR #193 Restrict Subs style to package-local subs only; previously
UNIVERSAL::can() walked the inheritance tree, potentially dispatching
to inherited base class methods on element names like <connect/>
Improvements:
- PR #195 Require perl 5.008 minimum and remove pre-5.008 compat code
(dead polyfills, tied-handle branch, ExtUtils::Liblist guard)
Documentation:
- PR #176 GH #173 Explain why the empty sub-parser parse is needed in
externalEntityRef for parameter entity processing
Maintenance:
- PR #194 Remove dead code: Built_In_Styles hash, $have_File_Spec,
newSVpvn/ERRSV compat guards
- PR #192 GH #190 Log expat version in all CI jobs for easier
diagnosis of platform-specific failures
- Add AI_POLICY.md for transparency
2.51 2026-03-20 (by Todd Rinaldo)
Fixes:
- PR #184 GH #182 Fix compile warnings from Fedora gcc: unhandled enum
value in switch and uninitialized variables in parse_stream
- PR #186 GH #183 Add explicit case labels for XML_CTYPE_EMPTY and
XML_CTYPE_ANY in generate_model switch to fix -Wswitch on BSD/clang
- PR #175 GH #174 Add XML_DTD/XML_GE compile-time guards to AllocTracker
and BillionLaughs XS bindings to fix warnings when expat lacks these flags
- PR #187 GH #185 Require proper declaration in AllocTracker feature
detection to prevent implicit function declaration on BSD
Improvements:
- PR #189 GH #188 Add tests for XS functions modified in PR #184 covering
XML_ErrorString, XML_GetBase/XML_SetBase, and generate_model
Maintenance:
- PR #181 GH #180 Add Fedora 43 container job to CI test matrix
- PR #178 Add BSD testing (FreeBSD, OpenBSD, NetBSD) to CI
- PR #179 Add no-lwp CI job to validate test suite without LWP::UserAgent
- Update MANIFEST
2.49 2026-03-19 (by Todd Rinaldo)
and I'm not sure to whom credit should be given.
- The file_ext_ent_handler now opens a file handle instead of
reading the entire entity at once.
- Merged patches supplied by Larry Wall to (for perl 5.6 and beyond)
tag generated strings as UTF-8, where appropriate.
- Fixed a bug in xml_escape reported by Jerry Geiger <jgeiger@rios.de>.
It failed when requesting escaping of perl regex meta-characters.
- Laurent Caprani <caprani@pop.multimania.com> reported a bug in the
Proc handler for the Debug style.
- <chocolateboy@usa.net> sent in a patch for the element index
mechanism. I was popping the stack too soon in the endElement fcn.
- Jim Miner <jfm@winternet.com> sent in a patch to fix a warning in
Expat.pm.
- Kurt Starsinic pointed out that the eval used to check for string
versus IO handle was leaving $@ dirty, thereby foiling higher
level exception handlers
- An expat question by Paul Prescod <paul@prescod.net> helped me
see that exeptions in the parse call bypass the Expat release method,
causing memory leaks.
- Mark D. Anderson <mda@discerning.com> noted that calling
recognized_string from the Final method caused a dump. There are
a bunch of methods that should not be called after parsing has
finished. These now have protective if statements around them.
- Updated canonical utility to conform to newer version of Canonical
XML working draft.
2.27 Sat Sep 25 18:26:44 EDT 1999
- Corrected documentation in Parser.pm
- Deal with XML_NS and XML_BYTE_ORDER macros in Expat/Makefile.PL
- Chris Thorman <chris@thorman.com> noted that "require 'URI::URL.pm'"
in Parser.pm was in error (should be "require 'URI/URL.pm'")
- Andrew McNaughton <andrew@scoop.co.nz> noted "use English" and
use of '$&' slowed down regex handling for whole application, so
they were excised from XML::Parser::Expat.
- Work around "modification of read-only value" bug in perl 5.004
- Enno Derksen <enno@att.com> reported that the Doctype handler
wasn't being called when ParseParamEnt was set.
- Now using Version 19990728 of expat, with local patches.
- Got rid of shadow buffer
o thus fixed the error reported by Ashley Sanders
<a.sanders@mcc.ac.uk>
o and removed ExpatNB limitations that Peter Billam
<music@pjb.com.au> noted.
- Vadim Konovalov <vkonovalov@lucent.com> had a problem compiling
for multi-threading that was fixed by changing Perl_sv_setsv to
sv_setsv.
- Added new Expat method: skip_until(index)
- Backward incompatible change to method xml_escape: to get former
behavior use $xp->xml_escape($string, '>', ...)
- Added utility, canonical, to samples
2.26 Sun Jul 25 19:06:41 EDT 1999
- Ken Beesley <ken.beesley@xrce.xerox.com> discovered that
declarations in the external subset are not sent to registered
handlers when there is no internal subset.
- Fixed parse_dtd to work when entity values or attribute defaults
are so large that they might be broken across multiple calls to
the default handler.
- For lwp_ext_ent_handler, use URI::URL instead of URI so that old
5.004 installations will work with it.
2.25 Fri Jul 23 06:23:43 EDT 1999
- Now using Version 1990709 of expat. No local patches.
- Numerous people reported a SEGV problem when running t/cdata
on various platforms and versions of perl. The problem was
introduced with the setHandlers change. In some cases an
un-initialized value was being returned.
- Added an additional external entity handler, lwp_ext_ent_handler,
that deals with general URIs. It is installed instead of the
"file only" handler if the LWP package is installed.
2.24 Thu Jul 8 23:05:50 EDT 1999
- KangChan Lee <dolphin@comeng.chungnam.ac.kr> supplied the
EUC-KR encoding map.
- Enno Derksen <enno@att.com> forwarded reports by Jon Eisenzopf
<eisen@pobox.com> and Stefaan Onderbeke <onderbes@bec.bel.alcatel.be>
about a core dump using XML::DOM. This was due to a bug in the
prolog parsing part of XML::Parser.
- Loic Dachary <loic@ceic.com> discovered that changing G_DISCARD to
G_VOID introduced a small memory leak. Changed G_VOID back to
G_DISCARD.
- As suggested by Ben Holzman <bholzman@earthlink.net>, the
setHandlers methods of both Parser and Expat now return lists that
consist of type, handler pairs that correspond to the input, but
the handlers returned are the ones that were in effect prior to
the call.
- Now using Version 19990626 of expat with a local patch (provided
by James Clark.)
- Added option ParseParamEnt. When set to a true value, parameter
entities are parsed and the external DTD is read (unless standalone
set to "Yes" in document).
2.23 Mon Apr 26 21:30:28 EDT 1999
- Fixed a bug in the ExpatNB class reported by Gabe Beged-Dov
<begeddov@jfinity.com>. The ErrorMessage attribute wasn't
being initialized for ExpatNB. This should have been done in
the Expat constructor.
- Applied patch provided by Nathan Kurz <nate@valleytel.net> to
fix more perl stack manipulation errors in Expat.xs.
- Applied another patch by Nathan to change perl_call_sv flag
from G_DISCARD to G_VOID for callbacks, which helps performance.
- Murata Makoto <murata@apsdc.ksp.fujixerox.co.jp> reported a
problem on Win32 platforms that only showed up when UTF-16 was
being used. The needed call to binmode was added to the parsefile
methods.
- Added documentation for release method that was added in release
2.20 to Expat pod. (Point raised by <mookie@undef.com>)
- Now using Version 19990425 of expat. No local patches.
- Added specified_attr method and made ineffective the is_defaulted
method.
2.22 Sun Apr 4 11:47:25 EDT 1999
- 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
( run in 0.500 second using v1.01-cache-2.11-cpan-e1769b4cff6 )