xref: /freebsd/contrib/expat/Changes (revision fe9278888fd4414abe2d922e469cf608005f4c65)
1                           __  __            _
2                        ___\ \/ /_ __   __ _| |_
3                       / _ \\  /| '_ \ / _` | __|
4                      |  __//  \| |_) | (_| | |_
5                       \___/_/\_\ .__/ \__,_|\__|
6                                |_| XML parser
7
8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9!! <blink>Expat is UNDERSTAFFED and WITHOUT FUNDING.</blink>                 !!
10!!                 ~~~~~~~~~~~~                                              !!
11!! The following topics need *additional skilled C developers* to progress   !!
12!! in a timely manner or at all (loosely ordered by descending priority):    !!
13!!                                                                           !!
14!! - teaming up on researching and fixing future security reports and        !!
15!!   ClusterFuzz findings with few-days-max response times in communication  !!
16!!   in order to (1) have a sound fix ready before the end of a 90 days      !!
17!!   grace period and (2) in a sustainable manner,                           !!
18!! - helping CPython Expat bindings with supporting Expat's billion laughs   !!
19!!   attack protection API (https://github.com/python/cpython/issues/90949): !!
20!!   - XML_SetBillionLaughsAttackProtectionActivationThreshold               !!
21!!   - XML_SetBillionLaughsAttackProtectionMaximumAmplification              !!
22!! - helping Perl's XML::Parser Expat bindings with supporting Expat's       !!
23!!   security API (https://github.com/cpan-authors/XML-Parser/issues/102):   !!
24!!   - XML_SetBillionLaughsAttackProtectionActivationThreshold               !!
25!!   - XML_SetBillionLaughsAttackProtectionMaximumAmplification              !!
26!!   - XML_SetReparseDeferralEnabled                                         !!
27!! - implementing and auto-testing XML 1.0r5 support                         !!
28!!   (needs discussion before pull requests),                                !!
29!! - smart ideas on fixing the Autotools CMake files generation issue        !!
30!!   without breaking CI (needs discussion before pull requests),            !!
31!! - pushing migration from `int` to `size_t` further                        !!
32!!   including edge-cases test coverage (needs discussion before anything).  !!
33!!                                                                           !!
34!! For details, please reach out via e-mail to sebastian@pipping.org so we   !!
35!! can schedule a voice call on the topic, in English or German.             !!
36!!                                                                           !!
37!! THANK YOU!                        Sebastian Pipping -- Berlin, 2024-03-09 !!
38!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
39
40Release 2.7.1 Thu March 27 2025
41        Bug fixes:
42       #980 #989  Restore event pointer behavior from Expat 2.6.4
43                    (that the fix to CVE-2024-8176 changed in 2.7.0);
44                    affected API functions are:
45                    - XML_GetCurrentByteCount
46                    - XML_GetCurrentByteIndex
47                    - XML_GetCurrentColumnNumber
48                    - XML_GetCurrentLineNumber
49                    - XML_GetInputContext
50
51        Other changes:
52       #976 #977  Autotools: Integrate files "fuzz/xml_lpm_fuzzer.{cpp,proto}"
53                    with Automake that were missing from 2.7.0 release tarballs
54       #983 #984  Fix printf format specifiers for 32bit Emscripten
55            #992  docs: Promote OpenSSF Best Practices self-certification
56            #978  tests/benchmark: Resolve mistaken double close
57            #986  Address compiler warnings
58       #990 #993  Version info bumped from 11:1:10 (libexpat*.so.1.10.1)
59                    to 11:2:10 (libexpat*.so.1.10.2); see https://verbump.de/
60                    for what these numbers do
61
62        Infrastructure:
63            #982  CI: Start running Perl XML::Parser integration tests
64            #987  CI: Enforce Clang Static Analyzer clean code
65            #991  CI: Re-enable warning clang-analyzer-valist.Uninitialized
66                    for clang-tidy
67            #981  CI: Cover compilation with musl
68       #983 #984  CI: Cover compilation with 32bit Emscripten
69       #976 #977  CI: Protect against fuzzer files missing from future
70                    release archives
71
72        Special thanks to:
73            Berkay Eren Ürün
74            Matthew Fernandez
75                 and
76            Perl XML::Parser
77
78Release 2.7.0 Thu March 13 2025
79        Security fixes:
80       #893 #973  CVE-2024-8176 -- Fix crash from chaining a large number
81                    of entities caused by stack overflow by resolving use of
82                    recursion, for all three uses of entities:
83                    - general entities in character data ("<e>&g1;</e>")
84                    - general entities in attribute values ("<e k1='&g1;'/>")
85                    - parameter entities ("%p1;")
86                    Known impact is (reliable and easy) denial of service:
87                    CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:H/RL:O/RC:C
88                    (Base Score: 7.5, Temporal Score: 7.2)
89                    Please note that a layer of compression around XML can
90                    significantly reduce the minimum attack payload size.
91
92        Other changes:
93       #935 #937  Autotools: Make generated CMake files look for
94                    libexpat.@SO_MAJOR@.dylib on macOS
95            #925  Autotools: Sync CMake templates with CMake 3.29
96  #945 #962 #966  CMake: Drop support for CMake <3.13
97            #942  CMake: Small fuzzing related improvements
98            #921  docs: Add missing documentation of error code
99                    XML_ERROR_NOT_STARTED that was introduced with 2.6.4
100            #941  docs: Document need for C++11 compiler for use from C++
101            #959  tests/benchmark: Fix a (harmless) TOCTTOU
102            #944  Windows: Fix installer target location of file xmlwf.xml
103                    for CMake
104            #953  Windows: Address warning -Wunknown-warning-option
105                    about -Wno-pedantic-ms-format from LLVM MinGW
106            #971  Address Cppcheck warnings
107       #969 #970  Mass-migrate links from http:// to https://
108    #947 #958 ..
109       #974 #975  Document changes since the previous release
110       #974 #975  Version info bumped from 11:0:10 (libexpat*.so.1.10.0)
111                    to 11:1:10 (libexpat*.so.1.10.1); see https://verbump.de/
112                    for what these numbers do
113
114        Infrastructure:
115            #926  tests: Increase robustness
116    #927 #932 ..
117       #930 #933  tests: Increase test coverage
118    #617 #950 ..
119    #951 #952 ..
120    #954 #955 ..  Fuzzing: Add new fuzzer "xml_lpm_fuzzer" based on
121            #961    Google's libprotobuf-mutator ("LPM")
122            #957  Fuzzing|CI: Start producing fuzzing code coverage reports
123            #936  CI: Pass -q -q for LCOV >=2.1 in coverage.sh
124            #942  CI: Small fuzzing related improvements
125    #139 #203 ..
126       #791 #946  CI: Make GitHub Actions build using MSVC on Windows and
127                      produce 32bit and 64bit Windows binaries
128            #956  CI: Get off of about-to-be-removed Ubuntu 20.04
129       #960 #964  CI: Start uploading to Coverity Scan for static analysis
130            #972  CI: Stop loading DTD from the internet to address flaky CI
131            #971  CI: Adapt to breaking changes in Cppcheck
132
133        Special thanks to:
134            Alexander Gieringer
135            Berkay Eren Ürün
136            Hanno Böck
137            Jann Horn
138            Mark Brand
139            Sebastian Andrzej Siewior
140            Snild Dolkow
141            Thomas Pröll
142            Tomas Korbar
143            valord577
144                 and
145            Google Project Zero
146            Linutronix
147            Red Hat
148            Siemens
149
150Release 2.6.4 Wed November 6 2024
151        Security fixes:
152            #915  CVE-2024-50602 -- Fix crash within function XML_ResumeParser
153                    from a NULL pointer dereference by disallowing function
154                    XML_StopParser to (stop or) suspend an unstarted parser.
155                    A new error code XML_ERROR_NOT_STARTED was introduced to
156                    properly communicate this situation.  // CWE-476 CWE-754
157
158        Other changes:
159            #903  CMake: Add alias target "expat::expat"
160            #905  docs: Document use via CMake >=3.18 with FetchContent
161                    and SOURCE_SUBDIR and its consequences
162            #902  tests: Reduce use of global parser instance
163            #904  tests: Resolve duplicate handler
164       #317 #918  tests: Improve tests on doctype closing (ex CVE-2019-15903)
165            #914  Fix signedness of format strings
166            #915  For use from C++, expat.h started requiring C++11 due to
167                    use of C99 features
168       #919 #920  Version info bumped from 10:3:9 (libexpat*.so.1.9.3)
169                    to 11:0:10 (libexpat*.so.1.10.0); see https://verbump.de/
170                    for what these numbers do
171
172        Infrastructure:
173            #907  CI: Upgrade Clang from 18 to 19
174            #913  CI: Drop macos-12 and add macos-15
175            #910  CI: Adapt to breaking changes in GitHub Actions
176            #898  Add missing entries to .gitignore
177
178        Special thanks to:
179            Hanno Böck
180            José Eduardo Gutiérrez Conejo
181            José Ricardo Cardona Quesada
182
183Release 2.6.3 Wed September 4 2024
184        Security fixes:
185       #887 #890  CVE-2024-45490 -- Calling function XML_ParseBuffer with
186                    len < 0 without noticing and then calling XML_GetBuffer
187                    will have XML_ParseBuffer fail to recognize the problem
188                    and XML_GetBuffer corrupt memory.
189                    With the fix, XML_ParseBuffer now complains with error
190                    XML_ERROR_INVALID_ARGUMENT just like sibling XML_Parse
191                    has been doing since Expat 2.2.1, and now documented.
192                    Impact is denial of service to potentially artitrary code
193                    execution.
194       #888 #891  CVE-2024-45491 -- Internal function dtdCopy can have an
195                    integer overflow for nDefaultAtts on 32-bit platforms
196                    (where UINT_MAX equals SIZE_MAX).
197                    Impact is denial of service to potentially artitrary code
198                    execution.
199       #889 #892  CVE-2024-45492 -- Internal function nextScaffoldPart can
200                    have an integer overflow for m_groupSize on 32-bit
201                    platforms (where UINT_MAX equals SIZE_MAX).
202                    Impact is denial of service to potentially artitrary code
203                    execution.
204
205        Other changes:
206       #851 #879  Autotools: Sync CMake templates with CMake 3.28
207            #853  Autotools: Always provide path to find(1) for portability
208            #861  Autotools: Ensure that the m4 directory always exists.
209            #870  Autotools: Simplify handling of SIZEOF_VOID_P
210            #869  Autotools: Support non-GNU sed
211            #856  Autotools|CMake: Fix main() to main(void)
212            #865  Autotools|CMake: Fix compile tests for HAVE_SYSCALL_GETRANDOM
213            #863  Autotools|CMake: Stop requiring dos2unix
214       #854 #855  CMake: Fix check for symbols size_t and off_t
215            #864  docs|tests: Convert README to Markdown and update
216            #741  Windows: Drop support for Visual Studio <=15.0/2017
217            #886  Drop needless XML_DTD guards around is_param access
218            #885  Fix typo in a code comment
219       #894 #896  Version info bumped from 10:2:9 (libexpat*.so.1.9.2)
220                    to 10:3:9 (libexpat*.so.1.9.3); see https://verbump.de/
221                    for what these numbers do
222
223        Infrastructure:
224            #880  Readme: Promote the call for help
225            #868  CI: Fix various issues
226            #849  CI: Allow triggering GitHub Actions workflows manually
227    #851 #872 ..
228       #873 #879  CI: Adapt to breaking changes in GitHub Actions
229
230        Special thanks to:
231            Alexander Bluhm
232            Berkay Eren Ürün
233            Dag-Erling Smørgrav
234            Ferenc Géczi
235            TaiYou
236
237Release 2.6.2 Wed March 13 2024
238        Security fixes:
239       #839 #842  CVE-2024-28757 -- Prevent billion laughs attacks with
240                    isolated use of external parsers.  Please see the commit
241                    message of commit 1d50b80cf31de87750103656f6eb693746854aa8
242                    for details.
243
244        Bug fixes:
245       #839 #841  Reject direct parameter entity recursion
246                    and avoid the related undefined behavior
247
248        Other changes:
249            #847  Autotools: Fix build for DOCBOOK_TO_MAN containing spaces
250            #837  Add missing #821 and #824 to 2.6.1 change log
251       #838 #843  Version info bumped from 10:1:9 (libexpat*.so.1.9.1)
252                    to 10:2:9 (libexpat*.so.1.9.2); see https://verbump.de/
253                    for what these numbers do
254
255        Special thanks to:
256            Philippe Antoine
257            Tomas Korbar
258                 and
259            Clang UndefinedBehaviorSanitizer
260            OSS-Fuzz / ClusterFuzz
261
262Release 2.6.1 Thu February 29 2024
263        Bug fixes:
264            #817  Make tests independent of CPU speed, and thus more robust
265       #828 #836  Expose billion laughs API with XML_DTD defined and
266                    XML_GE undefined, regression from 2.6.0
267
268        Other changes:
269            #829  Hide test-only code behind new internal macro
270            #833  Autotools: Reject expat_config.h.in defining SIZEOF_VOID_P
271       #821 #824  Autotools: Fix "make clean" for case:
272                    ./configure --without-docbook && make clean all
273            #819  Address compiler warnings
274       #832 #834  Version info bumped from 10:0:9 (libexpat*.so.1.9.0)
275                    to 10:1:9 (libexpat*.so.1.9.1); see https://verbump.de/
276                    for what these numbers do
277
278        Infrastructure:
279            #818  CI: Adapt to breaking changes in clang-format
280
281        Special thanks to:
282            David Hall
283            Snild Dolkow
284
285Release 2.6.0 Tue February 6 2024
286        Security fixes:
287      #789 #814  CVE-2023-52425 -- Fix quadratic runtime issues with big tokens
288                   that can cause denial of service, in partial where
289                   dealing with compressed XML input.  Applications
290                   that parsed a document in one go -- a single call to
291                   functions XML_Parse or XML_ParseBuffer -- were not affected.
292                   The smaller the chunks/buffers you use for parsing
293                   previously, the bigger the problem prior to the fix.
294                   Backporters should be careful to no omit parts of
295                   pull request #789 and to include earlier pull request #771,
296                   in order to not break the fix.
297           #777  CVE-2023-52426 -- Fix billion laughs attacks for users
298                   compiling *without* XML_DTD defined (which is not common).
299                   Users with XML_DTD defined have been protected since
300                   Expat >=2.4.0 (and that was CVE-2013-0340 back then).
301
302        Bug fixes:
303            #753  Fix parse-size-dependent "invalid token" error for
304                    external entities that start with a byte order mark
305            #780  Fix NULL pointer dereference in setContext via
306                    XML_ExternalEntityParserCreate for compilation with
307                    XML_DTD undefined
308       #812 #813  Protect against closing entities out of order
309
310        Other changes:
311            #723  Improve support for arc4random/arc4random_buf
312       #771 #788  Improve buffer growth in XML_GetBuffer and XML_Parse
313       #761 #770  xmlwf: Support --help and --version
314       #759 #770  xmlwf: Support custom buffer size for XML_GetBuffer and read
315            #744  xmlwf: Improve language and URL clickability in help output
316            #673  examples: Add new example "element_declarations.c"
317            #764  Be stricter about macro XML_CONTEXT_BYTES at build time
318            #765  Make inclusion to expat_config.h consistent
319       #726 #727  Autotools: configure.ac: Support --disable-maintainer-mode
320    #678 #705 ..
321  #706 #733 #792  Autotools: Sync CMake templates with CMake 3.26
322            #795  Autotools: Make installation of shipped man page doc/xmlwf.1
323                    independent of docbook2man availability
324            #815  Autotools|CMake: Add missing -DXML_STATIC to pkg-config file
325                    section "Cflags.private" in order to fix compilation
326                    against static libexpat using pkg-config on Windows
327       #724 #751  Autotools|CMake: Require a C99 compiler
328                    (a de-facto requirement already since Expat 2.2.2 of 2017)
329            #793  Autotools|CMake: Fix PACKAGE_BUGREPORT variable
330       #750 #786  Autotools|CMake: Make test suite require a C++11 compiler
331            #749  CMake: Require CMake >=3.5.0
332            #672  CMake: Lowercase off_t and size_t to help a bug in Meson
333            #746  CMake: Sort xmlwf sources alphabetically
334            #785  CMake|Windows: Fix generation of DLL file version info
335            #790  CMake: Build tests/benchmark/benchmark.c as well for
336                    a build with -DEXPAT_BUILD_TESTS=ON
337       #745 #757  docs: Document the importance of isFinal + adjust tests
338                    accordingly
339            #736  docs: Improve use of "NULL" and "null"
340            #713  docs: Be specific about version of XML (XML 1.0r4)
341                    and version of C (C99); (XML 1.0r5 will need a sponsor.)
342            #762  docs: reference.html: Promote function XML_ParseBuffer more
343            #779  docs: reference.html: Add HTML anchors to XML_* macros
344            #760  docs: reference.html: Upgrade to OK.css 1.2.0
345       #763 #739  docs: Fix typos
346            #696  docs|CI: Use HTTPS URLs instead of HTTP at various places
347    #669 #670 ..
348    #692 #703 ..
349       #733 #772  Address compiler warnings
350       #798 #800  Address clang-tidy warnings
351       #775 #776  Version info bumped from 9:10:8 (libexpat*.so.1.8.10)
352                    to 10:0:9 (libexpat*.so.1.9.0); see https://verbump.de/
353                    for what these numbers do
354
355        Infrastructure:
356       #700 #701  docs: Document security policy in file SECURITY.md
357            #766  docs: Improve parse buffer variables in-code documentation
358    #674 #738 ..
359    #740 #747 ..
360  #748 #781 #782  Refactor coverage and conformance tests
361       #714 #716  Refactor debug level variables to unsigned long
362            #671  Improve handling of empty environment variable value
363                    in function getDebugLevel (without visible user effect)
364    #755 #774 ..
365    #758 #783 ..
366       #784 #787  tests: Improve test coverage with regard to parse chunk size
367  #660 #797 #801  Fuzzing: Improve fuzzing coverage
368       #367 #799  Fuzzing|CI: Start running OSS-Fuzz fuzzing regression tests
369       #698 #721  CI: Resolve some Travis CI leftovers
370            #669  CI: Be robust towards absence of Git tags
371       #693 #694  CI: Set permissions to "contents: read" for security
372            #709  CI: Pin all GitHub Actions to specific commits for security
373            #739  CI: Reject spelling errors using codespell
374            #798  CI: Enforce clang-tidy clean code
375    #773 #808 ..
376       #809 #810  CI: Upgrade Clang from 15 to 18
377            #796  CI: Start using Clang's Control Flow Integrity sanitizer
378  #675 #720 #722  CI: Adapt to breaking changes in GitHub Actions Ubuntu images
379            #689  CI: Adapt to breaking changes in Clang/LLVM Debian packaging
380            #763  CI: Adapt to breaking changes in codespell
381            #803  CI: Adapt to breaking changes in Cppcheck
382
383        Special thanks to:
384            Ivan Galkin
385            Joyce Brum
386            Philippe Antoine
387            Rhodri James
388            Snild Dolkow
389            spookyahell
390            Steven Garske
391                 and
392            Clang AddressSanitizer
393            Clang UndefinedBehaviorSanitizer
394            codespell
395            GCC Farm Project
396            OSS-Fuzz
397            Sony Mobile
398
399Release 2.5.0 Tue October 25 2022
400        Security fixes:
401  #616 #649 #650  CVE-2022-43680 -- Fix heap use-after-free after overeager
402                    destruction of a shared DTD in function
403                    XML_ExternalEntityParserCreate in out-of-memory situations.
404                    Expected impact is denial of service or potentially
405                    arbitrary code execution.
406
407        Bug fixes:
408       #612 #645  Fix corruption from undefined entities
409       #613 #654  Fix case when parsing was suspended while processing nested
410                    entities
411  #616 #652 #653  Stop leaking opening tag bindings after a closing tag
412                    mismatch error where a parser is reset through
413                    XML_ParserReset and then reused to parse
414            #656  CMake: Fix generation of pkg-config file
415            #658  MinGW|CMake: Fix static library name
416
417        Other changes:
418            #663  Protect header expat_config.h from multiple inclusion
419            #666  examples: Make use of XML_GetBuffer and be more
420                    consistent across examples
421            #648  Address compiler warnings
422       #667 #668  Version info bumped from 9:9:8 to 9:10:8;
423                    see https://verbump.de/ for what these numbers do
424
425        Special thanks to:
426            Jann Horn
427            Mark Brand
428            Osyotr
429            Rhodri James
430                 and
431            Google Project Zero
432
433Release 2.4.9 Tue September 20 2022
434        Security fixes:
435       #629 #640  CVE-2022-40674 -- Heap use-after-free vulnerability in
436                    function doContent. Expected impact is denial of service
437                    or potentially arbitrary code execution.
438
439        Bug fixes:
440            #634  MinGW: Fix mis-compilation for -D__USE_MINGW_ANSI_STDIO=0
441            #614  docs: Fix documentation on effect of switch XML_DTD on
442                    symbol visibility in doc/reference.html
443
444        Other changes:
445            #638  MinGW: Make fix-xmltest-log.sh drop more Wine bug output
446       #596 #625  Autotools: Sync CMake templates with CMake 3.22
447            #608  CMake: Migrate from use of CMAKE_*_POSTFIX to
448                    dedicated variables EXPAT_*_POSTFIX to stop affecting
449                    other projects
450       #597 #599  Windows|CMake: Add missing -DXML_STATIC to test runners
451                    and fuzzers
452       #512 #621  Windows|CMake: Render .def file from a template to fix
453                    linking with -DEXPAT_DTD=OFF and/or -DEXPAT_ATTR_INFO=ON
454       #611 #621  MinGW|CMake: Apply MSVC .def file when linking
455       #622 #624  MinGW|CMake: Sync library name with GNU Autotools,
456                    i.e. produce libexpat-1.dll rather than libexpat.dll
457                    by default.  Filename libexpat.dll.a is unaffected.
458            #632  MinGW|CMake: Set missing variable CMAKE_RC_COMPILER in
459                    toolchain file "cmake/mingw-toolchain.cmake" to avoid
460                    error "windres: Command not found" on e.g. Ubuntu 20.04
461       #597 #627  CMake: Unify inconsistent use of set() and option() in
462                    context of public build time options to take need for
463                    set(.. FORCE) in projects using Expat by means of
464                    add_subdirectory(..) off Expat's users' shoulders
465       #626 #641  Stop exporting API symbols when building a static library
466            #644  Resolve use of deprecated "fgrep" by "grep -F"
467            #620  CMake: Make documentation on variables a bit more consistent
468            #636  CMake: Drop leading whitespace from a #cmakedefine line in
469                    file expat_config.h.cmake
470            #594  xmlwf: Fix harmless variable mix-up in function nsattcmp
471  #592 #593 #610  Address Cppcheck warnings
472            #643  Address Clang 15 compiler warnings
473       #642 #644  Version info bumped from 9:8:8 to 9:9:8;
474                    see https://verbump.de/ for what these numbers do
475
476        Infrastructure:
477       #597 #598  CI: Windows: Start covering MSVC 2022
478            #619  CI: macOS: Migrate off deprecated macOS 10.15
479            #632  CI: Linux: Make migration off deprecated Ubuntu 18.04 work
480            #643  CI: Upgrade Clang from 14 to 15
481            #637  apply-clang-format.sh: Add support for BSD find
482            #633  coverage.sh: Exclude MinGW headers
483            #635  coverage.sh: Fix name collision for -funsigned-char
484
485        Special thanks to:
486            David Faure
487            Felix Wilhelm
488            Frank Bergmann
489            Rhodri James
490            Rosen Penev
491            Thijs Schreijer
492            Vincent Torri
493                 and
494            Google Project Zero
495
496Release 2.4.8 Mon March 28 2022
497        Other changes:
498            #587  pkg-config: Move "-lm" to section "Libs.private"
499            #587  CMake|MSVC: Fix pkg-config section "Libs"
500        #55 #582  CMake|macOS: Start using linker arguments
501                    "-compatibility_version <version>" and
502                    "-current_version <version>" in a way compatible with
503                    GNU Libtool
504       #590 #591  Version info bumped from 9:7:8 to 9:8:8;
505                    see https://verbump.de/ for what these numbers do
506
507        Infrastructure:
508            #589  CI: Upgrade Clang from 13 to 14
509
510        Special thanks to:
511            evpobr
512            Kai Pastor
513            Sam James
514
515Release 2.4.7 Fri March 4 2022
516        Bug fixes:
517       #572 #577  Relax fix to CVE-2022-25236 (introduced with release 2.4.5)
518                    with regard to all valid URI characters (RFC 3986),
519                    i.e. the following set (excluding whitespace):
520                    ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
521                    0123456789 % -._~ :/?#[]@ !$&'()*+,;=
522
523        Other changes:
524  #555 #570 #581  CMake|Windows: Store Expat version in the DLL
525            #577  Document consequences of namespace separator choices not just
526                    in doc/reference.html but also in header <expat.h>
527            #577  Document Expat's lack of validation of namespace URIs against
528                    RFC 3986, and that the XML 1.0r4 specification doesn't
529                    require Expat to validate namespace URIs, and that Expat
530                    may do more in that regard in future releases.
531                    If you find need for strict RFC 3986 URI validation on
532                    application level today, https://uriparser.github.io/ may
533                    be of interest.
534            #579  Fix documentation of XML_EndDoctypeDeclHandler in <expat.h>
535            #575  Document that a call to XML_FreeContentModel can be done at
536                    a later time from outside the element declaration handler
537            #574  Make hardcoded namespace URIs easier to find in code
538            #573  Update documentation on use of XML_POOR_ENTOPY on Solaris
539       #569 #571  tests: Resolve use of macros NAN and INFINITY for GNU G++
540                    4.8.2 on Solaris.
541       #578 #580  Version info bumped from 9:6:8 to 9:7:8;
542                    see https://verbump.de/ for what these numbers do
543
544        Special thanks to:
545            Jeffrey Walton
546            Johnny Jazeix
547            Thijs Schreijer
548
549Release 2.4.6 Sun February 20 2022
550        Bug fixes:
551            #566  Fix a regression introduced by the fix for CVE-2022-25313
552                    in release 2.4.5 that affects applications that (1)
553                    call function XML_SetElementDeclHandler and (2) are
554                    parsing XML that contains nested element declarations
555                    (e.g. "<!ELEMENT junk ((bar|foo|xyz+), zebra*)>").
556
557        Other changes:
558       #567 #568  Version info bumped from 9:5:8 to 9:6:8;
559                    see https://verbump.de/ for what these numbers do
560
561        Special thanks to:
562            Matt Sergeant
563            Samanta Navarro
564            Sergei Trofimovich
565                 and
566            NixOS
567            Perl XML::Parser
568
569Release 2.4.5 Fri February 18 2022
570        Security fixes:
571            #562  CVE-2022-25235 -- Passing malformed 2- and 3-byte UTF-8
572                    sequences (e.g. from start tag names) to the XML
573                    processing application on top of Expat can cause
574                    arbitrary damage (e.g. code execution) depending
575                    on how invalid UTF-8 is handled inside the XML
576                    processor; validation was not their job but Expat's.
577                    Exploits with code execution are known to exist.
578            #561  CVE-2022-25236 -- Passing (one or more) namespace separator
579                    characters in "xmlns[:prefix]" attribute values
580                    made Expat send malformed tag names to the XML
581                    processor on top of Expat which can cause
582                    arbitrary damage (e.g. code execution) depending
583                    on such unexpectable cases are handled inside the XML
584                    processor; validation was not their job but Expat's.
585                    Exploits with code execution are known to exist.
586            #558  CVE-2022-25313 -- Fix stack exhaustion in doctype parsing
587                    that could be triggered by e.g. a 2 megabytes
588                    file with a large number of opening braces.
589                    Expected impact is denial of service or potentially
590                    arbitrary code execution.
591            #560  CVE-2022-25314 -- Fix integer overflow in function copyString;
592                    only affects the encoding name parameter at parser creation
593                    time which is often hardcoded (rather than user input),
594                    takes a value in the gigabytes to trigger, and a 64-bit
595                    machine.  Expected impact is denial of service.
596            #559  CVE-2022-25315 -- Fix integer overflow in function storeRawNames;
597                    needs input in the gigabytes and a 64-bit machine.
598                    Expected impact is denial of service or potentially
599                    arbitrary code execution.
600
601        Other changes:
602       #557 #564  Version info bumped from 9:4:8 to 9:5:8;
603                    see https://verbump.de/ for what these numbers do
604
605        Special thanks to:
606            Ivan Fratric
607            Samanta Navarro
608                 and
609            Google Project Zero
610            JetBrains
611
612Release 2.4.4 Sun January 30 2022
613        Security fixes:
614            #550  CVE-2022-23852 -- Fix signed integer overflow
615                    (undefined behavior) in function XML_GetBuffer
616                    (that is also called by function XML_Parse internally)
617                    for when XML_CONTEXT_BYTES is defined to >0 (which is both
618                    common and default).
619                    Impact is denial of service or more.
620            #551  CVE-2022-23990 -- Fix unsigned integer overflow in function
621                    doProlog triggered by large content in element type
622                    declarations when there is an element declaration handler
623                    present (from a prior call to XML_SetElementDeclHandler).
624                    Impact is denial of service or more.
625
626        Bug fixes:
627       #544 #545  xmlwf: Fix a memory leak on output file opening error
628
629        Other changes:
630            #546  Autotools: Fix broken CMake support under Cygwin
631            #554  Windows: Add missing files to the installer to fix
632                    compilation with CMake from installed sources
633       #552 #554  Version info bumped from 9:3:8 to 9:4:8;
634                    see https://verbump.de/ for what these numbers do
635
636        Special thanks to:
637            Carlo Bramini
638            hwt0415
639            Roland Illig
640            Samanta Navarro
641                 and
642            Clang LeakSan and the Clang team
643
644Release 2.4.3 Sun January 16 2022
645        Security fixes:
646       #531 #534  CVE-2021-45960 -- Fix issues with left shifts by >=29 places
647                    resulting in
648                      a) realloc acting as free
649                      b) realloc allocating too few bytes
650                      c) undefined behavior
651                    depending on architecture and precise value
652                    for XML documents with >=2^27+1 prefixed attributes
653                    on a single XML tag a la
654                    "<r xmlns:a='[..]' a:a123='[..]' [..] />"
655                    where XML_ParserCreateNS is used to create the parser
656                    (which needs argument "-n" when running xmlwf).
657                    Impact is denial of service, or more.
658       #532 #538  CVE-2021-46143 (ZDI-CAN-16157) -- Fix integer overflow
659                    on variable m_groupSize in function doProlog leading
660                    to realloc acting as free.
661                    Impact is denial of service or more.
662            #539  CVE-2022-22822 to CVE-2022-22827 -- Prevent integer overflows
663                    near memory allocation at multiple places.  Mitre assigned
664                    a dedicated CVE for each involved internal C function:
665                    - CVE-2022-22822 for function addBinding
666                    - CVE-2022-22823 for function build_model
667                    - CVE-2022-22824 for function defineAttribute
668                    - CVE-2022-22825 for function lookup
669                    - CVE-2022-22826 for function nextScaffoldPart
670                    - CVE-2022-22827 for function storeAtts
671                    Impact is denial of service or more.
672
673        Other changes:
674            #535  CMake: Make call to file(GENERATE [..]) work for CMake <3.19
675            #541  Autotools|CMake: MinGW: Make run.sh(.in) work for Cygwin
676                    and MSYS2 by not going through Wine on these platforms
677       #527 #528  Address compiler warnings
678       #533 #543  Version info bumped from 9:2:8 to 9:3:8;
679                    see https://verbump.de/ for what these numbers do
680
681        Infrastructure:
682            #536  CI: Check for realistic minimum CMake version
683       #529 #539  CI: Cover compilation with -m32
684            #529  CI: Store coverage reports as artifacts for download
685            #528  CI: Upgrade Clang from 11 to 13
686
687        Special thanks to:
688            An anonymous whitehat
689            Christopher Degawa
690            J. Peter Mugaas
691            Tyson Smith
692                 and
693            GCC Farm Project
694            Trend Micro Zero Day Initiative
695
696Release 2.4.2 Sun December 19 2021
697        Other changes:
698       #509 #510  Link againgst libm for function "isnan"
699       #513 #514  Include expat_config.h as early as possible
700            #498  Autotools: Include files with release archives:
701                    - buildconf.sh
702                    - fuzz/*.c
703       #507 #519  Autotools: Sync CMake templates with CMake 3.20
704       #495 #524  CMake: MinGW: Fix pkg-config section "Libs" for
705                    - non-release build types (e.g. -DCMAKE_BUILD_TYPE=Debug)
706                    - multi-config CMake generators (e.g. Ninja Multi-Config)
707       #502 #503  docs: Document that function XML_GetBuffer may return NULL
708                    when asking for a buffer of 0 (zero) bytes size
709       #522 #523  docs: Fix return value docs for both
710                    XML_SetBillionLaughsAttackProtection* functions
711       #525 #526  Version info bumped from 9:1:8 to 9:2:8;
712                    see https://verbump.de/ for what these numbers do
713
714        Special thanks to:
715            Donghee Na
716            Joergen Ibsen
717            Kai Pastor
718
719Release 2.4.1 Sun May 23 2021
720        Bug fixes:
721       #488 #490  Autotools: Fix installed header expat_config.h for multilib
722                    systems; regression introduced in 2.4.0 by pull request #486
723
724        Other changes:
725       #491 #492  Version info bumped from 9:0:8 to 9:1:8;
726                    see https://verbump.de/ for what these numbers do
727
728        Special thanks to:
729            Gentoo's QA check "multilib_check_headers"
730
731Release 2.4.0 Sun May 23 2021
732        Security fixes:
733   #34 #466 #484  CVE-2013-0340/CWE-776 -- Protect against billion laughs attacks
734                    (denial-of-service; flavors targeting CPU time or RAM or both,
735                    leveraging general entities or parameter entities or both)
736                    by tracking and limiting the input amplification factor
737                    (<amplification> := (<direct> + <indirect>) / <direct>).
738                    By conservative default, amplification up to a factor of 100.0
739                    is tolerated and rejection only starts after 8 MiB of output bytes
740                    (=<direct> + <indirect>) have been processed.
741                    The fix adds the following to the API:
742                    - A new error code XML_ERROR_AMPLIFICATION_LIMIT_BREACH to
743                      signals this specific condition.
744                    - Two new API functions ..
745                      - XML_SetBillionLaughsAttackProtectionMaximumAmplification and
746                      - XML_SetBillionLaughsAttackProtectionActivationThreshold
747                      .. to further tighten billion laughs protection parameters
748                      when desired.  Please see file "doc/reference.html" for details.
749                      If you ever need to increase the defaults for non-attack XML
750                      payload, please file a bug report with libexpat.
751                    - Two new XML_FEATURE_* constants ..
752                      - that can be queried using the XML_GetFeatureList function, and
753                      - that are shown in "xmlwf -v" output.
754                    - Two new environment variable switches ..
755                      - EXPAT_ACCOUNTING_DEBUG=(0|1|2|3) and
756                      - EXPAT_ENTITY_DEBUG=(0|1)
757                      .. for runtime debugging of accounting and entity processing.
758                      Specific behavior of these values may change in the future.
759                    - Two new command line arguments "-a FACTOR" and "-b BYTES"
760                      for xmlwf to further tighten billion laughs protection
761                      parameters when desired.
762                      If you ever need to increase the defaults for non-attack XML
763                      payload, please file a bug report with libexpat.
764
765        Bug fixes:
766       #332 #470  For (non-default) compilation with -DEXPAT_MIN_SIZE=ON (CMake)
767                    or CPPFLAGS=-DXML_MIN_SIZE (GNU Autotools): Fix segfault
768                    for UTF-16 payloads containing CDATA sections.
769       #485 #486  Autotools: Fix generated CMake files for non-64bit and
770                    non-Linux platforms (e.g. macOS and MinGW in particular)
771                    that were introduced with release 2.3.0
772
773        Other changes:
774       #468 #469  xmlwf: Improve help output and the xmlwf man page
775            #463  xmlwf: Improve maintainability through some refactoring
776            #477  xmlwf: Fix man page DocBook validity
777            #456  Autotools: Sync CMake templates with CMake 3.18
778       #458 #459  CMake: Support absolute paths for both CMAKE_INSTALL_LIBDIR
779                    and CMAKE_INSTALL_INCLUDEDIR
780       #471 #481  CMake: Add support for standard variable BUILD_SHARED_LIBS
781            #457  Unexpose symbol _INTERNAL_trim_to_complete_utf8_characters
782            #467  Resolve macro HAVE_EXPAT_CONFIG_H
783            #472  Delete unused legacy helper file "conftools/PrintPath"
784       #473 #483  Improve attribution
785  #464 #465 #477  doc/reference.html: Fix XHTML validity
786       #475 #478  doc/reference.html: Replace the 90s look by OK.css
787            #479  Version info bumped from 8:0:7 to 9:0:8
788                    due to addition of new symbols and error codes;
789                    see https://verbump.de/ for what these numbers do
790
791        Infrastructure:
792            #456  CI: Enable periodic runs
793            #457  CI: Start covering the list of exported symbols
794            #474  CI: Isolate coverage task
795       #476 #482  CI: Adapt to breaking changes in image "ubuntu-18.04"
796            #477  CI: Cover well-formedness and DocBook/XHTML validity
797                    of doc/reference.html and doc/xmlwf.xml
798
799        Special thanks to:
800            Dimitry Andric
801            Eero Helenius
802            Nick Wellnhofer
803            Rhodri James
804            Tomas Korbar
805            Yury Gribov
806                 and
807            Clang LeakSan
808            JetBrains
809            OSS-Fuzz
810
811Release 2.3.0 Thu March 25 2021
812        Bug fixes:
813            #438  When calling XML_ParseBuffer without a prior successful call to
814                    XML_GetBuffer as a user, no longer trigger undefined behavior
815                    (by adding an integer to a NULL pointer) but rather return
816                    XML_STATUS_ERROR and set the error code to (new) code
817                    XML_ERROR_NO_BUFFER. Found by UBSan (UndefinedBehaviorSanitizer)
818                    of Clang 11 (but not Clang 9).
819            #444  xmlwf: Exit status 2 was used for both:
820                    - malformed input files (documented) and
821                    - invalid command-line arguments (undocumented).
822                    The case of invalid command-line arguments now
823                    has its own exit status 4, resolving the ambiguity.
824
825        Other changes:
826            #439  xmlwf: Add argument -k to allow continuing after
827                    non-fatal errors
828            #439  xmlwf: Add section about exit status to the -h help output
829  #422 #426 #447  Windows: Drop support for Visual Studio <=14.0/2015
830            #434  Windows: CMake: Detect unsupported Visual Studio at
831                    configure time (rather than at compile time)
832       #382 #428  testrunner: Make verbose mode (argument "-v") report
833                    about passed tests, and make default mode report about
834                    failures, as well.
835            #442  CMake: Call "enable_language(CXX)" prior to tinkering
836                    with CMAKE_CXX_* variables
837            #448  Document use of libexpat from a CMake-based project
838            #451  Autotools: Install CMake files as generated by CMake 3.19.6
839                    so that users with "find_package(expat [..] CONFIG [..])"
840                    are served on distributions that are *not* using the CMake
841                    build system inside for libexpat packaging
842       #436 #437  Autotools: Drop obsolescent macro AC_HEADER_STDC
843       #450 #452  Autotools: Resolve use of obsolete macro AC_CONFIG_HEADER
844            #441  Address compiler warnings
845            #443  Version info bumped from 7:12:6 to 8:0:7
846                    due to addition of error code XML_ERROR_NO_BUFFER
847                    (see https://verbump.de/ for what these numbers do)
848
849        Infrastructure:
850       #435 #446  Replace Travis CI by GitHub Actions
851
852        Special thanks to:
853            Alexander Richardson
854            Oleksandr Popovych
855            Thomas Beutlich
856            Tim Bray
857                 and
858            Clang LeakSan, Clang 11 UBSan and the Clang team
859
860Release 2.2.10 Sat October 3 2020
861        Bug fixes:
862  #390 #395 #398  Fix undefined behavior during parsing caused by
863                    pointer arithmetic with NULL pointers
864       #404 #405  Fix reading uninitialized variable during parsing
865            #406  xmlwf: Add missing check for malloc NULL return
866
867        Other changes:
868            #396  Windows: Drop support for Visual Studio <=8.0/2005
869            #409  Windows: Add missing file "Changes" to the installer
870                    to fix compilation with CMake from installed sources
871            #403  xmlwf: Document exit codes in xmlwf manpage and
872                    exit with code 3 (rather than code 1) for output errors
873                    when used with "-d DIRECTORY"
874       #356 #359  MinGW: Provide declaration of rand_s for mingwrt <5.3.0
875       #383 #392  Autotools: Use -Werror while configure tests the compiler
876                    for supported compile flags to avoid false positives
877  #383 #393 #394  Autotools: Improve handling of user (C|CPP|CXX|LD)FLAGS,
878                    e.g. ensure that they have the last word over flags added
879                    while running ./configure
880            #360  CMake: Create libexpatw.{dll,so} and expatw.pc (with emphasis
881                    on suffix "w") with -DEXPAT_CHAR_TYPE=(ushort|wchar_t)
882            #360  CMake: Detect and deny unsupported build combinations
883                    involving -DEXPAT_CHAR_TYPE=(ushort|wchar_t)
884            #360  CMake: Install pre-compiled shipped xmlwf.1 manpage in case
885                    of -DEXPAT_BUILD_DOCS=OFF
886  #375 #380 #419  CMake: Fix use of Expat by means of add_subdirectory
887       #407 #408  CMake: Keep expat target name constant at "expat"
888                    (i.e. refrain from using the target name to control
889                    build artifact filenames)
890            #385  CMake: Fix compilation with -DEXPAT_SHARED_LIBS=OFF for
891                    Windows
892                  CMake: Expose man page compilation as target "xmlwf-manpage"
893       #413 #414  CMake: Introduce option EXPAT_BUILD_PKGCONFIG
894                    to control generation of pkg-config file "expat.pc"
895            #424  CMake: Add minimalistic support for building binary packages
896                    with CMake target "package"; based on CPack
897            #366  CMake: Add option -DEXPAT_OSSFUZZ_BUILD=(ON|OFF) with
898                    default OFF to build fuzzer code against OSS-Fuzz and
899                    related environment variable LIB_FUZZING_ENGINE
900            #354  Fix testsuite for -DEXPAT_DTD=OFF and -DEXPAT_NS=OFF, each
901    #354 #355 ..
902       #356 #412  Address compiler warnings
903       #368 #369  Address pngcheck warnings with doc/*.png images
904            #425  Version info bumped from 7:11:6 to 7:12:6
905
906        Special thanks to:
907            asavah
908            Ben Wagner
909            Bhargava Shastry
910            Frank Landgraf
911            Jeffrey Walton
912            Joe Orton
913            Kleber Tarcísio
914            Ma Lin
915            Maciej Sroczyński
916            Mohammed Khajapasha
917            Vadim Zeitlin
918                 and
919            Cppcheck 2.0 and the Cppcheck team
920
921Release 2.2.9 Wed September 25 2019
922        Other changes:
923                  examples: Drop executable bits from elements.c
924            #349  Windows: Change the name of the Windows DLLs from expat*.dll
925                    to libexpat*.dll once more (regression from 2.2.8, first
926                    fixed in 1.95.3, issue #61 on SourceForge today,
927                    was issue #432456 back then); needs a fix due
928                    case-insensitive file systems on Windows and the fact that
929                    Perl's XML::Parser::Expat compiles into Expat.dll.
930            #347  Windows: Only define _CRT_RAND_S if not defined
931                  Version info bumped from 7:10:6 to 7:11:6
932
933        Special thanks to:
934            Ben Wagner
935
936Release 2.2.8 Fri September 13 2019
937        Security fixes:
938       #317 #318  CVE-2019-15903 -- Fix heap overflow triggered by
939                    XML_GetCurrentLineNumber (or XML_GetCurrentColumnNumber),
940                    and deny internal entities closing the doctype;
941                    fixed in commit c20b758c332d9a13afbbb276d30db1d183a85d43
942
943        Bug fixes:
944            #240  Fix cases where XML_StopParser did not have any effect
945                    when called from inside of an end element handler
946            #341  xmlwf: Fix exit code for operation without "-d DIRECTORY";
947                    previously, only "-d DIRECTORY" would give you a proper
948                    exit code:
949                      # xmlwf -d . <<<'<not well-formed>' 2>/dev/null ; echo $?
950                      2
951                      # xmlwf <<<'<not well-formed>' 2>/dev/null ; echo $?
952                      0
953                    Now both cases return exit code 2.
954
955        Other changes:
956       #299 #302  Windows: Replace LoadLibrary hack to access
957                    unofficial API function SystemFunction036 (RtlGenRandom)
958                    by using official API function rand_s (needs WinXP+)
959            #325  Windows: Drop support for Visual Studio <=7.1/2003
960                    and document supported compilers in README.md
961            #286  Windows: Remove COM code from xmlwf; in case it turns
962                    out needed later, there will be a dedicated repository
963                    below https://github.com/libexpat/ for that code
964            #322  Windows: Remove explicit MSVC solution and project files.
965                    You can generate Visual Studio solution files through
966                    CMake, e.g.: cmake -G"Visual Studio 15 2017" .
967            #338  xmlwf: Make "xmlwf -h" help output more friendly
968            #339  examples: Improve elements.c
969       #244 #264  Autotools: Add argument --enable-xml-attr-info
970       #239 #301  Autotools: Add arguments
971                    --with-getrandom
972                    --without-getrandom
973                    --with-sys-getrandom
974                    --without-sys-getrandom
975       #312 #343  Autotools: Fix linking issues with "./configure LD=clang"
976                  Autotools: Fix "make run-xmltest" for out-of-source builds
977       #329 #336  CMake: Pull all options from Expat <=2.2.7 into namespace
978                    prefix EXPAT_ with the exception of DOCBOOK_TO_MAN:
979                    - BUILD_doc            -> EXPAT_BUILD_DOCS (plural)
980                    - BUILD_examples       -> EXPAT_BUILD_EXAMPLES
981                    - BUILD_shared         -> EXPAT_SHARED_LIBS
982                    - BUILD_tests          -> EXPAT_BUILD_TESTS
983                    - BUILD_tools          -> EXPAT_BUILD_TOOLS
984                    - DOCBOOK_TO_MAN       -> DOCBOOK_TO_MAN (unchanged)
985                    - INSTALL              -> EXPAT_ENABLE_INSTALL
986                    - MSVC_USE_STATIC_CRT  -> EXPAT_MSVC_STATIC_CRT
987                    - USE_libbsd           -> EXPAT_WITH_LIBBSD
988                    - WARNINGS_AS_ERRORS   -> EXPAT_WARNINGS_AS_ERRORS
989                    - XML_CONTEXT_BYTES    -> EXPAT_CONTEXT_BYTES
990                    - XML_DEV_URANDOM      -> EXPAT_DEV_URANDOM
991                    - XML_DTD              -> EXPAT_DTD
992                    - XML_NS               -> EXPAT_NS
993                    - XML_UNICODE          -> EXPAT_CHAR_TYPE=ushort (!)
994                    - XML_UNICODE_WCHAR_T  -> EXPAT_CHAR_TYPE=wchar_t (!)
995       #244 #264  CMake: Add argument -DEXPAT_ATTR_INFO=(ON|OFF),
996                    default OFF
997            #326  CMake: Add argument -DEXPAT_LARGE_SIZE=(ON|OFF),
998                    default OFF
999            #328  CMake: Add argument -DEXPAT_MIN_SIZE=(ON|OFF),
1000                    default OFF
1001       #239 #277  CMake: Add arguments
1002                    -DEXPAT_WITH_GETRANDOM=(ON|OFF|AUTO), default AUTO
1003                    -DEXPAT_WITH_SYS_GETRANDOM=(ON|OFF|AUTO), default AUTO
1004            #326  CMake: Install expat_config.h to include directory
1005            #326  CMake: Generate and install configuration files for
1006                    future find_package(expat [..] CONFIG [..])
1007                  CMake: Now produces a summary of applied configuration
1008                  CMake: Require C++ compiler only when tests are enabled
1009            #330  CMake: Fix compilation for 16bit character types,
1010                    i.e. ex -DXML_UNICODE=ON (and ex -DXML_UNICODE_WCHAR_T=ON)
1011            #265  CMake: Fix linking with MinGW
1012            #330  CMake: Add full support for MinGW; to enable, use
1013                    -DCMAKE_TOOLCHAIN_FILE=[expat]/cmake/mingw-toolchain.cmake
1014            #330  CMake: Port "make run-xmltest" from GNU Autotools to CMake
1015            #316  CMake: Windows: Make binary postfix match MSVC
1016                    Old: expat[d].lib
1017                    New: expat[w][d][MD|MT].lib
1018                  CMake: Migrate files from Windows to Unix line endings
1019            #308  CMake: Integrate OSS-Fuzz fuzzers, option
1020                    -DEXPAT_BUILD_FUZZERS=(ON|OFF), default OFF
1021             #14  Drop an OpenVMS support leftover
1022    #235 #268 ..
1023    #270 #310 ..
1024  #313 #331 #333  Address compiler warnings
1025    #282 #283 ..
1026       #284 #285  Address cppcheck warnings
1027       #294 #295  Address Clang Static Analyzer warnings
1028        #24 #293  Mass-apply clang-format 9 (and ensure conformance during CI)
1029                  Version info bumped from 7:9:6 to 7:10:6
1030
1031        Special thanks to:
1032            David Loffredo
1033            Joonun Jang
1034            Kishore Kunche
1035            Marco Maggi
1036            Mitch Phillips
1037            Mohammed Khajapasha
1038            Rolf Ade
1039            xantares
1040            Zhongyuan Zhou
1041
1042Release 2.2.7 Wed June 19 2019
1043        Security fixes:
1044       #186 #262  CVE-2018-20843 -- Fix extraction of namespace prefixes from
1045                    XML names; XML names with multiple colons could end up in
1046                    the wrong namespace, and take a high amount of RAM and CPU
1047                    resources while processing, opening the door to
1048                    use for denial-of-service attacks
1049
1050        Other changes:
1051       #195 #197  Autotools/CMake: Utilize -fvisibility=hidden to stop
1052                    exporting non-API symbols
1053            #227  Autotools: Add --without-examples and --without-tests
1054            #228  Autotools: Modernize configure.ac
1055       #245 #246  Autotools: Fix check for -fvisibility=hidden for Clang
1056       #247 #248  Autotools: Fix compilation for lack of docbook2x-man
1057       #236 #258  Autotools: Produce .tar.{gz,lz,xz} release archives
1058            #212  CMake: Make libdir of pkgconfig expat.pc support multilib
1059       #158 #263  CMake: Build man page in PROJECT_BINARY_DIR not _SOURCE_DIR
1060            #219  Remove fallback to bcopy, assume that memmove(3) exists
1061            #257  Use portable "/usr/bin/env bash" shebang (e.g. for OpenBSD)
1062            #243  Windows: Fix syntax of .def module definition files
1063                  Version info bumped from 7:8:6 to 7:9:6
1064
1065        Special thanks to:
1066            Benjamin Peterson
1067            Caolán McNamara
1068            Hanno Böck
1069            KangLin
1070            Kishore Kunche
1071            Marco Maggi
1072            Rhodri James
1073            Sebastian Dröge
1074            userwithuid
1075            Yury Gribov
1076
1077Release 2.2.6 Sun August 12 2018
1078        Bug fixes:
1079       #170 #206  Avoid doing arithmetic with NULL pointers in XML_GetBuffer
1080       #204 #205  Fix 2.2.5 regression with suspend-resume while parsing
1081                    a document like '<root/>'
1082
1083        Other changes:
1084       #165 #168  Autotools: Fix docbook-related configure syntax error
1085            #166  Autotools: Avoid grep option `-q` for Solaris
1086            #167  Autotools: Support
1087                    ./configure DOCBOOK_TO_MAN="xmlto man --skip-validation"
1088       #159 #167  Autotools: Support DOCBOOK_TO_MAN command which produces
1089                    xmlwf.1 rather than XMLWF.1; also covers case insensitive
1090                    file systems
1091            #181  Autotools: Drop -rpath option passed to libtool
1092            #188  Autotools: Detect and deny SGML docbook2man as ours is XML
1093            #188  Autotools/CMake: Support command db2x_docbook2man as well
1094            #174  CMake: Introduce option WARNINGS_AS_ERRORS, defaults to OFF
1095       #184 #185  CMake: Introduce option MSVC_USE_STATIC_CRT, defaults to OFF
1096       #207 #208  CMake: Introduce option XML_UNICODE and XML_UNICODE_WCHAR_T,
1097                    both defaulting to OFF
1098            #175  CMake: Prefer check_symbol_exists over check_function_exists
1099            #176  CMake: Create the same pkg-config file as with GNU Autotools
1100       #178 #179  CMake: Use GNUInstallDirs module to set proper defaults for
1101                    install directories
1102            #208  CMake: Utilize expat_config.h.cmake for XML_DEV_URANDOM
1103            #180  Windows: Fix compilation of test suite for Visual Studio 2008
1104  #131 #173 #202  Address compiler warnings
1105  #187 #190 #200  Fix miscellaneous typos
1106                  Version info bumped from 7:7:6 to 7:8:6
1107
1108        Special thanks to:
1109            Anton Maklakov
1110            Benjamin Peterson
1111            Brad King
1112            Franek Korta
1113            Frank Rast
1114            Joe Orton
1115            luzpaz
1116            Pedro Vicente
1117            Rainer Jung
1118            Rhodri James
1119            Rolf Ade
1120            Rolf Eike Beer
1121            Thomas Beutlich
1122            Tomasz Kłoczko
1123
1124Release 2.2.5 Tue October 31 2017
1125        Bug fixes:
1126              #8  If the parser runs out of memory, make sure its internal
1127                    state reflects the memory it actually has, not the memory
1128                    it wanted to have.
1129             #11  The default handler wasn't being called when it should for
1130                    a SYSTEM or PUBLIC doctype if an entity declaration handler
1131                    was registered.
1132       #137 #138  Fix a case of mistakenly reported parsing success where
1133                    XML_StopParser was called from an element handler
1134            #162  Function XML_ErrorString was returning NULL rather than
1135                    a message for code XML_ERROR_INVALID_ARGUMENT
1136                    introduced with release 2.2.1
1137
1138        Other changes:
1139            #106  xmlwf: Add argument -N adding notation declarations
1140        #75 #106  Test suite: Resolve expected failure cases where xmlwf
1141                    output was incomplete
1142            #127  Windows: Fix test suite compilation
1143       #126 #127  Windows: Fix compilation for Visual Studio 2012
1144                  Windows: Upgrade shipped project files to Visual Studio 2017
1145        #33 #132  tests: Mass-fix compilation for XML_UNICODE_WCHAR_T
1146            #129  examples: Fix compilation for XML_UNICODE_WCHAR_T
1147            #130  benchmark: Fix compilation for XML_UNICODE_WCHAR_T
1148            #144  xmlwf: Fix compilation for XML_UNICODE_WCHAR_T; still needs
1149                    Windows or MinGW for 2-byte wchar_t
1150              #9  Address two Clang Static Analyzer false positives
1151             #59  Resolve troublesome macros hiding parser struct membership
1152                    and dereferencing that pointer
1153              #6  Resolve superfluous internal malloc/realloc switch
1154       #153 #155  Improve docbook2x-man detection
1155            #160  Undefine NDEBUG in the test suite (rather than rejecting it)
1156            #161  Address compiler warnings
1157                  Version info bumped from 7:6:6 to 7:7:6
1158
1159        Special thanks to:
1160            Benbuck Nason
1161            Hans Wennborg
1162            José Gutiérrez de la Concha
1163            Pedro Monreal Gonzalez
1164            Rhodri James
1165            Rolf Ade
1166            Stephen Groat
1167                 and
1168            Core Infrastructure Initiative
1169
1170Release 2.2.4 Sat August 19 2017
1171        Bug fixes:
1172            #115  Fix copying of partial characters for UTF-8 input
1173
1174        Other changes:
1175            #109  Fix "make check" for non-x86 architectures that default
1176                    to unsigned type char (-128..127 rather than 0..255)
1177            #109  coverage.sh: Cover -funsigned-char
1178                  Autotools: Introduce --without-xmlwf argument
1179             #65  Autotools: Replace handwritten Makefile with GNU Automake
1180             #43  CMake: Auto-detect high quality entropy extractors, add new
1181                    option USE_libbsd=ON to use arc4random_buf of libbsd
1182             #74  CMake: Add -fno-strict-aliasing only where supported
1183            #114  CMake: Always honor manually set BUILD_* options
1184            #114  CMake: Compile man page if docbook2x-man is available, only
1185            #117  Include file tests/xmltest.log.expected in source tarball
1186                    (required for "make run-xmltest")
1187            #117  Include (existing) Visual Studio 2013 files in source tarball
1188                  Improve test suite error output
1189            #111  Fix some typos in documentation
1190                  Version info bumped from 7:5:6 to 7:6:6
1191
1192        Special thanks to:
1193            Jakub Wilk
1194            Joe Orton
1195            Lin Tian
1196            Rolf Eike Beer
1197
1198Release 2.2.3 Wed August 2 2017
1199        Security fixes:
1200             #82  CVE-2017-11742 -- Windows: Fix DLL hijacking vulnerability
1201                    using Steve Holme's LoadLibrary wrapper for/of cURL
1202
1203        Bug fixes:
1204             #85  Fix a dangling pointer issue related to realloc
1205
1206        Other changes:
1207                  Increase code coverage
1208             #91  Linux: Allow getrandom to fail if nonblocking pool has not
1209                    yet been initialized and read /dev/urandom then, instead.
1210                    This is in line with what recent Python does.
1211             #81  Pre-10.7/Lion macOS: Support entropy from arc4random
1212             #86  Check that a UTF-16 encoding in an XML declaration has the
1213                    right endianness
1214        #4 #5 #7  Recover correctly when some reallocations fail
1215                  Repair "./configure && make" for systems without any
1216                    provider of high quality entropy
1217                    and try reading /dev/urandom on those
1218                  Ensure that user-defined character encodings have converter
1219                    functions when they are needed
1220                  Fix mis-leading description of argument -c in xmlwf.1
1221                  Rely on macro HAVE_ARC4RANDOM_BUF (rather than __CloudABI__)
1222                    for CloudABI
1223            #100  Fix use of SIPHASH_MAIN in siphash.h
1224             #23  Test suite: Fix memory leaks
1225                  Version info bumped from 7:4:6 to 7:5:6
1226
1227        Special thanks to:
1228            Chanho Park
1229            Joe Orton
1230            Pascal Cuoq
1231            Rhodri James
1232            Simon McVittie
1233            Vadim Zeitlin
1234            Viktor Szakats
1235                 and
1236            Core Infrastructure Initiative
1237
1238Release 2.2.2 Wed July 12 2017
1239        Security fixes:
1240             #43  Protect against compilation without any source of high
1241                    quality entropy enabled, e.g. with CMake build system;
1242                    commit ff0207e6076e9828e536b8d9cd45c9c92069b895
1243             #60  Windows with _UNICODE:
1244                    Unintended use of LoadLibraryW with a non-wide string
1245                    resulted in failure to load advapi32.dll and degradation
1246                    in quality of used entropy when compiled with _UNICODE for
1247                    Windows; you can launch existing binaries with
1248                    EXPAT_ENTROPY_DEBUG=1 in the environment to inspect the
1249                    quality of entropy used during runtime; commits
1250                    * 95b95032f907ef1cd17ee7a9a1768010a825d61d
1251                    * 73a5a2e9c081f49f2d775cf7ced864158b68dc80
1252   [MOX-006]      Fix non-NULL parser parameter validation in XML_Parse;
1253                    resulted in NULL dereference, previously;
1254                    commit ac256dafdffc9622ab0dc2c62fcecb0dfcfa71fe
1255
1256        Bug fixes:
1257             #69  Fix improper use of unsigned long long integer literals
1258
1259        Other changes:
1260             #73  Start requiring a C99 compiler
1261             #49  Fix "==" Bashism in configure script
1262             #50  Fix too eager getrandom detection for Debian GNU/kFreeBSD
1263             #52    and macOS
1264             #51  Address lack of stdint.h in Visual Studio 2003 to 2008
1265             #58  Address compile warnings
1266             #68  Fix "./buildconf.sh && ./configure" for some versions
1267                    of Dash for /bin/sh
1268             #72  CMake: Ease use of Expat in context of a parent project
1269                    with multiple CMakeLists.txt files
1270             #72  CMake: Resolve mistaken executable permissions
1271             #76  Address compile warning with -DNDEBUG (not recommended!)
1272             #77  Address compile warning about macro redefinition
1273
1274        Special thanks to:
1275            Alexander Bluhm
1276            Ben Boeckel
1277            Cătălin Răceanu
1278            Kerin Millar
1279            László Böszörményi
1280            S. P. Zeidler
1281            Segev Finer
1282            Václav Slavík
1283            Victor Stinner
1284            Viktor Szakats
1285                 and
1286            Radically Open Security
1287
1288Release 2.2.1 Sat June 17 2017
1289        Security fixes:
1290                  CVE-2017-9233 -- External entity infinite loop DoS
1291                    Details: https://libexpat.github.io/doc/cve-2017-9233/
1292                    Commit c4bf96bb51dd2a1b0e185374362ee136fe2c9d7f
1293   [MOX-002]      CVE-2016-9063 -- Detect integer overflow; commit
1294                    d4f735b88d9932bd5039df2335eefdd0723dbe20
1295                    (Fixed version of existing downstream patches!)
1296   (SF.net) #539  Fix regression from fix to CVE-2016-0718 cutting off
1297                    longer tag names; commits
1298                    * 896b6c1fd3b842f377d1b62135dccf0a579cf65d
1299                    * af507cef2c93cb8d40062a0abe43a4f4e9158fb2
1300             #16    * 0dbbf43fdb20f593ddf4fa1ff67288000dd4a7fd
1301             #25  More integer overflow detection (function poolGrow); commits
1302                    * 810b74e4703dcfdd8f404e3cb177d44684775143
1303                    * 44178553f3539ce69d34abee77a05e879a7982ac
1304   [MOX-002]      Detect overflow from len=INT_MAX call to XML_Parse; commits
1305                    * 4be2cb5afcc018d996f34bbbce6374b7befad47f
1306                    * 7e5b71b748491b6e459e5c9a1d090820f94544d8
1307   [MOX-005] #30  Use high quality entropy for hash initialization:
1308                    * arc4random_buf on BSD, systems with libbsd
1309                      (when configured with --with-libbsd), CloudABI
1310                    * RtlGenRandom on Windows XP / Server 2003 and later
1311                    * getrandom on Linux 3.17+
1312                    In a way, that's still part of CVE-2016-5300.
1313                    https://github.com/libexpat/libexpat/pull/30/commits
1314   [MOX-005]      For the low quality entropy extraction fallback code,
1315                    the parser instance address can no longer leak, commit
1316                    04ad658bd3079dd15cb60fc67087900f0ff4b083
1317   [MOX-003]      Prevent use of uninitialised variable; commit
1318   [MOX-004]        a4dc944f37b664a3ca7199c624a98ee37babdb4b
1319                  Add missing parameter validation to public API functions
1320                    and dedicated error code XML_ERROR_INVALID_ARGUMENT:
1321   [MOX-006]        * NULL checks; commits
1322                      * d37f74b2b7149a3a95a680c4c4cd2a451a51d60a (merge/many)
1323                      * 9ed727064b675b7180c98cb3d4f75efba6966681
1324                      * 6a747c837c50114dfa413994e07c0ba477be4534
1325                    * Negative length (XML_Parse); commit
1326   [MOX-002]          70db8d2538a10f4c022655d6895e4c3e78692e7f
1327   [MOX-001] #35  Change hash algorithm to William Ahern's version of SipHash
1328                    to go further with fixing CVE-2012-0876.
1329                    https://github.com/libexpat/libexpat/pull/39/commits
1330
1331        Bug fixes:
1332             #32  Fix sharing of hash salt across parsers;
1333                    relevant where XML_ExternalEntityParserCreate is called
1334                    prior to XML_Parse, in particular (e.g. FBReader)
1335             #28  xmlwf: Auto-disable use of memory-mapping (and parsing
1336                    as a single chunk) for files larger than ~1 GB (2^30 bytes)
1337                    rather than failing with error "out of memory"
1338              #3  Fix double free after malloc failure in DTD code; commit
1339                    7ae9c3d3af433cd4defe95234eae7dc8ed15637f
1340             #17  Fix memory leak on parser error for unbound XML attribute
1341                    prefix with new namespaces defined in the same tag;
1342                    found by Google's OSS-Fuzz; commits
1343                    * 16f87daae5a16132e479e4f71862128c7a915c73
1344                    * b47dbc9745932c160893d433220e462bd605f8cd
1345                  xmlwf on Windows: Add missing calls to CloseHandle
1346
1347        New features:
1348             #30  Introduced environment switch EXPAT_ENTROPY_DEBUG=1
1349                    for runtime debugging of entropy extraction
1350
1351        Other changes:
1352                  Increase code coverage
1353             #33  Reject use of XML_UNICODE_WCHAR_T with sizeof(wchar_t) != 2;
1354                    XML_UNICODE_WCHAR_T was never meant to be used outside
1355                    of Windows; 4-byte wchar_t is common on Linux
1356   (SF.net) #538  Start using -fno-strict-aliasing
1357   (SF.net) #540  Support compilation against cloudlibc of CloudABI
1358                  Allow MinGW cross-compilation
1359   (SF.net) #534  CMake: Introduce option "BUILD_doc" (enabled by default)
1360                    to bypass compilation of the xmlwf.1 man page
1361   (SF.net)  pr2  CMake: Introduce option "INSTALL" (enabled by default)
1362                    to bypass installation of expat files
1363                  CMake: Fix ninja support
1364                  Autotools: Add parameters --enable-xml-context [COUNT]
1365                    and --disable-xml-context; default of context of 1024
1366                    bytes enabled unchanged
1367             #14  Drop AmigaOS 4.x code and includes
1368             #14  Drop ancient build systems:
1369                    * Borland C++ Builder
1370                    * OpenVMS
1371                    * Open Watcom
1372                    * Visual Studio 6.0
1373                    * Pre-X Mac OS (MPW Makefile)
1374                    If you happen to rely on some of these, please get in
1375                    touch for joining with maintenance.
1376             #10  Move from WIN32 to _WIN32
1377             #13  Fix "make run-xmltest" order instability
1378                  Address compile warnings
1379                  Bump version info from 7:2:6 to 7:3:6
1380                  Add AUTHORS file
1381
1382        Infrastructure:
1383              #1  Migrate from SourceForge to GitHub (except downloads):
1384                    https://github.com/libexpat/
1385              #1  Re-create http://libexpat.org/ project website
1386                  Start utilizing Travis CI
1387
1388        Special thanks to:
1389            Andy Wang
1390            Don Lewis
1391            Ed Schouten
1392            Karl Waclawek
1393            Pascal Cuoq
1394            Rhodri James
1395            Sergei Nikulov
1396            Tobias Taschner
1397            Viktor Szakats
1398                 and
1399            Core Infrastructure Initiative
1400            Mozilla Foundation (MOSS Track 3: Secure Open Source)
1401            Radically Open Security
1402
1403Release 2.2.0 Tue June 21 2016
1404        Security fixes:
1405            #537  CVE-2016-0718 -- Fix crash on malformed input
1406                  CVE-2016-4472 -- Improve insufficient fix to CVE-2015-1283 /
1407                                   CVE-2015-2716 introduced with Expat 2.1.1
1408            #499  CVE-2016-5300 -- Use more entropy for hash initialization
1409                                   than the original fix to CVE-2012-0876
1410            #519  CVE-2012-6702 -- Resolve troublesome internal call to srand
1411                                   that was introduced with Expat 2.1.0
1412                                   when addressing CVE-2012-0876 (issue #496)
1413
1414        Bug fixes:
1415                  Fix uninitialized reads of size 1
1416                    (e.g. in little2_updatePosition)
1417                  Fix detection of UTF-8 character boundaries
1418
1419        Other changes:
1420            #532  Fix compilation for Visual Studio 2010 (keyword "C99")
1421                  Autotools: Resolve use of "$<" to better support bmake
1422                  Autotools: Add QA script "qa.sh" (and make target "qa")
1423                  Autotools: Respect CXXFLAGS if given
1424                  Autotools: Fix "make run-xmltest"
1425                  Autotools: Have "make run-xmltest" check for expected output
1426             p90  CMake: Fix static build (BUILD_shared=OFF) on Windows
1427            #536  CMake: Add soversion, support -DNO_SONAME=yes to bypass
1428            #323  CMake: Add suffix "d" to differentiate debug from release
1429                  CMake: Define WIN32 with CMake on Windows
1430                  Annotate memory allocators for GCC
1431                  Address all currently known compile warnings
1432                  Make sure that API symbols remain visible despite
1433                    -fvisibility=hidden
1434                  Remove executable flag from source files
1435                  Resolve COMPILED_FROM_DSP in favor of WIN32
1436
1437        Special thanks to:
1438            Björn Lindahl
1439            Christian Heimes
1440            Cristian Rodríguez
1441            Daniel Krügler
1442            Gustavo Grieco
1443            Karl Waclawek
1444            László Böszörményi
1445            Marco Grassi
1446            Pascal Cuoq
1447            Sergei Nikulov
1448            Thomas Beutlich
1449            Warren Young
1450            Yann Droneaud
1451
1452Release 2.1.1 Sat March 12 2016
1453        Security fixes:
1454            #582: CVE-2015-1283 - Multiple integer overflows in XML_GetBuffer
1455
1456        Bug fixes:
1457            #502: Fix potential null pointer dereference
1458            #520: Symbol XML_SetHashSalt was not exported
1459            Output of "xmlwf -h" was incomplete
1460
1461        Other changes:
1462            #503: Document behavior of calling XML_SetHashSalt with salt 0
1463            Minor improvements to man page xmlwf(1)
1464            Improvements to the experimental CMake build system
1465            libtool now invoked with --verbose
1466
1467Release 2.1.0 Sat March 24 2012
1468        - Security fixes:
1469          #2958794: CVE-2012-1148 - Memory leak in poolGrow.
1470          #2895533: CVE-2012-1147 - Resource leak in readfilemap.c.
1471          #3496608: CVE-2012-0876 - Hash DOS attack.
1472          #2894085: CVE-2009-3560 - Buffer over-read and crash in big2_toUtf8().
1473          #1990430: CVE-2009-3720 - Parser crash with special UTF-8 sequences.
1474        - Bug Fixes:
1475          #1742315: Harmful XML_ParserCreateNS suggestion.
1476          #1785430: Expat build fails on linux-amd64 with gcc version>=4.1 -O3.
1477          #1983953, 2517952, 2517962, 2649838:
1478                Build modifications using autoreconf instead of buildconf.sh.
1479          #2815947, #2884086: OBJEXT and EXEEXT support while building.
1480          #2517938: xmlwf should return non-zero exit status if not well-formed.
1481          #2517946: Wrong statement about XMLDecl in xmlwf.1 and xmlwf.sgml.
1482          #2855609: Dangling positionPtr after error.
1483          #2990652: CMake support.
1484          #3010819: UNEXPECTED_STATE with a trailing "%" in entity value.
1485          #3206497: Uninitialized memory returned from XML_Parse.
1486          #3287849: make check fails on mingw-w64.
1487        - Patches:
1488          #1749198: pkg-config support.
1489          #3010222: Fix for bug #3010819.
1490          #3312568: CMake support.
1491          #3446384: Report byte offsets for attr names and values.
1492        - New Features / API changes:
1493          Added new API member XML_SetHashSalt() that allows setting an initial
1494                value (salt) for hash calculations. This is part of the fix for
1495                bug #3496608 to randomize hash parameters.
1496          When compiled with XML_ATTR_INFO defined, adds new API member
1497                XML_GetAttributeInfo() that allows retrieving the byte
1498                offsets for attribute names and values (patch #3446384).
1499          Added CMake build system.
1500                See bug #2990652 and patch #3312568.
1501          Added run-benchmark target to Makefile.in - relies on testdata module
1502                present in the same relative location as in the repository.
1503
1504Release 2.0.1 Tue June 5 2007
1505        - Fixed bugs #1515266, #1515600: The character data handler's calling
1506          of XML_StopParser() was not handled properly; if the parser was
1507          stopped and the handler set to NULL, the parser would segfault.
1508        - Fixed bug #1690883: Expat failed on EBCDIC systems as it assumed
1509          some character constants to be ASCII encoded.
1510        - Minor cleanups of the test harness.
1511        - Fixed xmlwf bug #1513566: "out of memory" error on file size zero.
1512        - Fixed outline.c bug #1543233: missing a final XML_ParserFree() call.
1513        - Fixes and improvements for Windows platform:
1514          bugs #1409451, #1476160, #1548182, #1602769, #1717322.
1515        - Build fixes for various platforms:
1516          HP-UX, Tru64, Solaris 9: patch #1437840, bug #1196180.
1517          All Unix: #1554618 (refreshed config.sub/config.guess).
1518                    #1490371, #1613457: support both, DESTDIR and INSTALL_ROOT,
1519                    without relying on GNU-Make specific features.
1520          #1647805: Patched configure.in to work better with Intel compiler.
1521        - Fixes to Makefile.in to have make check work correctly:
1522          bugs #1408143, #1535603, #1536684.
1523        - Added Open Watcom support: patch #1523242.
1524
1525Release 2.0.0 Wed Jan 11 2006
1526        - We no longer use the "check" library for C unit testing; we
1527          always use the (partial) internal implementation of the API.
1528        - Report XML_NS setting via XML_GetFeatureList().
1529        - Fixed headers for use from C++.
1530        - XML_GetCurrentLineNumber() and  XML_GetCurrentColumnNumber()
1531          now return unsigned integers.
1532        - Added XML_LARGE_SIZE switch to enable 64-bit integers for
1533          byte indexes and line/column numbers.
1534        - Updated to use libtool 1.5.22 (the most recent).
1535        - Added support for AmigaOS.
1536        - Some mostly minor bug fixes. SF issues include: #1006708,
1537          #1021776, #1023646, #1114960, #1156398, #1221160, #1271642.
1538
1539Release 1.95.8 Fri Jul 23 2004
1540        - Major new feature: suspend/resume.  Handlers can now request
1541          that a parse be suspended for later resumption or aborted
1542          altogether.  See "Temporarily Stopping Parsing" in the
1543          documentation for more details.
1544        - Some mostly minor bug fixes, but compilation should no
1545          longer generate warnings on most platforms.  SF issues
1546          include: #827319, #840173, #846309, #888329, #896188, #923913,
1547          #928113, #961698, #985192.
1548
1549Release 1.95.7 Mon Oct 20 2003
1550        - Fixed enum XML_Status issue (reported on SourceForge many
1551          times), so compilers that are properly picky will be happy.
1552        - Introduced an XMLCALL macro to control the calling
1553          convention used by the Expat API; this macro should be used
1554          to annotate prototypes and definitions of callback
1555          implementations in code compiled with a calling convention
1556          other than the default convention for the host platform.
1557        - Improved ability to build without the configure-generated
1558          expat_config.h header.  This is useful for applications
1559          which embed Expat rather than linking in the library.
1560        - Fixed a variety of bugs: see SF issues #458907, #609603,
1561          #676844, #679754, #692878, #692964, #695401, #699323, #699487,
1562          #820946.
1563        - Improved hash table lookups.
1564        - Added more regression tests and improved documentation.
1565
1566Release 1.95.6 Tue Jan 28 2003
1567        - Added XML_FreeContentModel().
1568        - Added XML_MemMalloc(), XML_MemRealloc(), XML_MemFree().
1569        - Fixed a variety of bugs: see SF issues #615606, #616863,
1570          #618199, #653180, #673791.
1571        - Enhanced the regression test suite.
1572        - Man page improvements: includes SF issue #632146.
1573
1574Release 1.95.5 Fri Sep 6 2002
1575        - Added XML_UseForeignDTD() for improved SAX2 support.
1576        - Added XML_GetFeatureList().
1577        - Defined XML_Bool type and the values XML_TRUE and XML_FALSE.
1578        - Use an incomplete struct instead of a void* for the parser
1579          (may not retain).
1580        - Fixed UTF-8 decoding bug that caused legal UTF-8 to be rejected.
1581        - Finally fixed bug where default handler would report DTD
1582          events that were already handled by another handler.
1583          Initial patch contributed by Darryl Miles.
1584        - Removed unnecessary DllMain() function that caused static
1585          linking into a DLL to be difficult.
1586        - Added VC++ projects for building static libraries.
1587        - Reduced line-length for all source code and headers to be
1588          no longer than 80 characters, to help with AS/400 support.
1589        - Reduced memory copying during parsing (SF patch #600964).
1590        - Fixed a variety of bugs: see SF issues #580793, #434664,
1591          #483514, #580503, #581069, #584041, #584183, #584832, #585537,
1592          #596555, #596678, #598352, #598944, #599715, #600479, #600971.
1593
1594Release 1.95.4 Fri Jul 12 2002
1595        - Added support for VMS, contributed by Craig Berry.  See
1596          vms/README.vms for more information.
1597        - Added Mac OS (classic) support, with a makefile for MPW,
1598          contributed by Thomas Wegner and Daryle Walker.
1599        - Added Borland C++ Builder 5 / BCC 5.5 support, contributed
1600          by Patrick McConnell (SF patch #538032).
1601        - Fixed a variety of bugs: see SF issues #441449, #563184,
1602          #564342, #566334, #566901, #569461, #570263, #575168, #579196.
1603        - Made skippedEntityHandler conform to SAX2 (see source comment)
1604        - Re-implemented WFC: Entity Declared from XML 1.0 spec and
1605          added a new error "entity declared in parameter entity":
1606          see SF bug report #569461 and SF patch #578161
1607        - Re-implemented section 5.1 from XML 1.0 spec:
1608          see SF bug report #570263 and SF patch #578161
1609
1610Release 1.95.3 Mon Jun 3 2002
1611        - Added a project to the MSVC workspace to create a wchar_t
1612          version of the library; the DLLs are named libexpatw.dll.
1613        - Changed the name of the Windows DLLs from expat.dll to
1614          libexpat.dll; this fixes SF bug #432456.
1615        - Added the XML_ParserReset() API function.
1616        - Fixed XML_SetReturnNSTriplet() to work for element names.
1617        - Made the XML_UNICODE builds usable (thanks, Karl!).
1618        - Allow xmlwf to read from standard input.
1619        - Install a man page for xmlwf on Unix systems.
1620        - Fixed many bugs; see SF bug reports #231864, #461380, #464837,
1621          #466885, #469226, #477667, #484419, #487840, #494749, #496505,
1622          #547350.  Other bugs which we can't test as easily may also
1623          have been fixed, especially in the area of build support.
1624
1625Release 1.95.2 Fri Jul 27 2001
1626        - More changes to make MSVC happy with the build; add a single
1627          workspace to support both the library and xmlwf application.
1628        - Added a Windows installer for Windows users; includes
1629          xmlwf.exe.
1630        - Added compile-time constants that can be used to determine the
1631          Expat version
1632        - Removed a lot of GNU-specific dependencies to aide portability
1633          among the various Unix flavors.
1634        - Fix the UTF-8 BOM bug.
1635        - Cleaned up warning messages for several compilers.
1636        - Added the -Wall, -Wstrict-prototypes options for GCC.
1637
1638Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000
1639        - Changes to get expat to build under Microsoft compiler
1640        - Removed all aborts and instead return an UNEXPECTED_STATE error.
1641        - Fixed a bug where a stray '%' in an entity value would cause an
1642          abort.
1643        - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for
1644          finding this oversight.
1645        - Changed default patterns in lib/Makefile.in to fit non-GNU makes
1646          Thanks to robin@unrated.net for reporting and providing an
1647          account to test on.
1648        - The reference had the wrong label for XML_SetStartNamespaceDecl.
1649          Reported by an anonymous user.
1650
1651Release 1.95.0 Fri Sep 29 2000
1652        - XML_ParserCreate_MM
1653                Allows you to set a memory management suite to replace the
1654                standard malloc,realloc, and free.
1655        - XML_SetReturnNSTriplet
1656                If you turn this feature on when namespace processing is in
1657                effect, then qualified, prefixed element and attribute names
1658                are returned as "uri|name|prefix" where '|' is whatever
1659                separator character is used in namespace processing.
1660        - Merged in features from perl-expat
1661                o XML_SetElementDeclHandler
1662                o XML_SetAttlistDeclHandler
1663                o XML_SetXmlDeclHandler
1664                o XML_SetEntityDeclHandler
1665                o StartDoctypeDeclHandler takes 3 additional parameters:
1666                        sysid, pubid, has_internal_subset
1667                o Many paired handler setters (like XML_SetElementHandler)
1668                  now have corresponding individual handler setters
1669                o XML_GetInputContext for getting the input context of
1670                  the current parse position.
1671        - Added reference material
1672        - Packaged into a distribution that builds a sharable library
1673