
        NEWS file for libxml2

  Note that this is automatically generated from the news webpage at:
       http://xmlsoft.org/news.html

The change log at 
ChangeLog.html
 describes the recents commits
to the GIT at 
http://git.gnome.org/browse/libxml2/
 code base.Here is the list of public releases:
2.9.2: Oct 16 2014:
   - Security:
  Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),
  CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)
  
   - Bug Fixes:
  fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),
  xmlmemory: handle realloc properly (Yegor Yefremov),
  Python generator bug raised by the const change (Daniel Veillard),
  Windows Critical sections not released correctly (Daniel Veillard),
  Parser error on repeated recursive entity expansion containing &lt; (Daniel Veillard),
  xpointer : fixing Null Pointers (Gaurav Gupta),
  Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),
  parser bug on misformed namespace attributes (Dennis Filder),
  Pointer dereferenced before null check (Daniel Veillard),
  Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),
  Possible overflow in HTMLParser.c (Daniel Veillard),
  python/tests/sync.py assumes Python dictionaries are ordered (John Beck),
  Fix Enum check and missing break (Gaurav Gupta),
  xmlIO: Handle error returns from dup() (Philip Withnall),
  Fix a problem properly saving URIs (Daniel Veillard),
  wrong error column in structured error when parsing attribute values (Juergen Keil),
  wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),
  no error column in structured error handler for xml schema validation errors (Juergen Keil),
  Couple of Missing Null checks (Gaurav Gupta),
  Add couple of missing Null checks (Daniel Veillard),
  xmlschemastypes: Fix potential array overflow (Philip Withnall),
  runtest: Fix a memory leak on parse failure (Philip Withnall),
  xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),
  xmlcatalog: Fix a memory leak on quit (Philip Withnall),
  HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),
  Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),
  Avoid Possible Null Pointer in trio.c (Gaurav Gupta),
  Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),
  XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),
  Fix various Missing Null checks (Gaurav Gupta),
  Fix a potential NULL dereference (Daniel Veillard),
  Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),
  Add a missing argument check (Gaurav Gupta),
  Adding a check in case of allocation error (Gaurav Gupta),
  xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),
  Adding some missing NULL checks (Gaurav),
  Fixes for xmlInitParserCtxt (Daniel Veillard),
  Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),
  erroneously ignores a validation error if no error callback set (Daniel Veillard),
  xmllint was not parsing the --c14n11 flag (Sérgio Batista),
  Avoid Possible null pointer dereference in memory debug mode (Gaurav),
  Avoid Double Null Check (Gaurav),
  Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),
  Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),
  Avoid a possible NULL pointer dereference (Gaurav),
  Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),
  Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),
  fixing a ptotential uninitialized access (Daniel Veillard),
  Fix an fd leak in an error case (Daniel Veillard),
  Missing initialization for the catalog module (Daniel Veillard),
  Handling of XPath function arguments in error case (Nick Wellnhofer),
  Fix a couple of missing NULL checks (Gaurav),
  Avoid a possibility of dangling encoding handler (Gaurav),
  Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),
  Fix a bug loading some compressed files (Mike Alexander),
  Fix XPath node comparison bug (Gaurav),
  Type mismatch in xmlschemas.c (Gaurav),
  Type mismatch in xmlschemastypes.c (Gaurav),
  Avoid a deadcode in catalog.c (Daniel Veillard),
  run close socket on Solaris, same as we do on other platforms (Denis Pauk),
  Fix pointer dereferenced before null check (Gaurav),
  Fix a potential NULL dereference in tree code (Daniel Veillard),
  Fix potential NULL pointer dereferences in regexp code (Gaurav),
  xmllint --pretty crashed without following numeric argument (Tim Galeckas),
  Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),
  Fix XPath '//' optimization with predicates (Nick Wellnhofer),
  Clear up a potential NULL dereference (Daniel Veillard),
  Fix a possible NULL dereference (Gaurav),
  Avoid crash if allocation fails (Daniel Veillard),
  Remove occasional leading space in XPath number formatting (Daniel Veillard),
  Fix handling of mmap errors (Daniel Veillard),
  Catch malloc error and exit accordingly (Daniel Veillard),
  missing else in xlink.c (Ami Fischman),
  Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),
  Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),
  properly quote the namespace uris written out during c14n (Aleksey Sanin),
  Remove premature XInclude check on URI being relative (Alexey Neyman),
  Fix missing break on last() function for attributes (dcb),
  Do not URI escape in server side includes (Romain Bondue),
  Fix an error in xmlCleanupParser (Alexander Pastukhov)
  
   - Documentation:
  typo in error messages "colon are forbidden from..." (Daniel Veillard),
  Fix a link to James SAX documentation old page (Daniel Veillard),
  Fix typos in relaxng.c (Jan Pokorný),
  Fix a doc typo (Daniel Veillard),
  Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),
  Add limitations about encoding conversion (Daniel Veillard),
  Fix typos in xmlschemas{,types}.c (Jan Pokorný),
  Fix incorrect spelling entites->entities (Jan Pokorný),
  Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)
  
   - Portability:
  AC_CONFIG_FILES and executable bit (Roumen Petrov),
  remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),
  fix some tabs mixing incompatible with python3 (Roumen Petrov),
  Visual Studio 14 CTP defines snprintf() (Francis Dupont),
  OS400: do not try to copy unexisting doc files (Patrick Monnerat),
  OS400: use either configure.ac or configure.in. (Patrick Monnerat),
  os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),
  OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),
  OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),
  OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),
  OS400: include in distribution tarball. (Patrick Monnerat),
  OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),
  OS400: Add compilation scripts. (Patrick Monnerat),
  OS400: ILE RPG language header files. (Patrick Monnerat),
  OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),
  OS400: UTF8<-->EBCDIC wrappers for system and external library calls (Patrick Monnerat),
  OS400: Easy character transcoding support (Patrick Monnerat),
  OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),
  OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),
  Fix building when configuring without xpath and xptr (Daniel Veillard),
  configure: Add --with-python-install-dir (Jonas Eriksson),
  Fix compilation with minimum and xinclude. (Nicolas Le Cam),
  Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),
  Fix compilation with minimum and schematron. (Nicolas Le Cam),
  Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),
  Don't use xmlValidateName() when not available. (Nicolas Le Cam),
  Fix a portability issue on Windows (Longstreth Jon),
  Various portability patches for OpenVMS (Jacob (Jouk) Jansen),
  Use specific macros for portability to OS/400 (Patrick Monnerat),
  Add macros needed for OS/400 portability (Patrick Monnerat),
  Portability patch for fopen on OS/400 (Patrick Monnerat),
  Portability fixes for OS/400 (Patrick Monnerat),
  Improve va_list portability (Patrick Monnerat),
  Portability fix (Patrick Monnerat),
  Portability fix (Patrick Monnerat),
  Generic portability fix (Patrick Monnerat),
  Shortening lines in headers (Patrick Monnerat),
  build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),
  build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),
  fix some tabs mixing incompatible with python3 (Daniel Veillard),
  add additional defines checks for support "./configure --with-minimum" (Denis Pauk),
  Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),
  python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),
  python: Fix compiler warnings when building python3 bindings (Armin K),
  Fix for compilation with python 2.6.8 (Petr Sumbera)
  
   - Improvements:
  win32/libxml2.def.src after rebuild in doc (Roumen Petrov),
  elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),
  elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),
  Provide cmake module (Samuel Martin),
  Fix a couple of issues raised by make dist (Daniel Veillard),
  Fix and add const qualifiers (Kurt Roeckx),
  Preparing for upcoming release of 2.9.2 (Daniel Veillard),
  Fix zlib and lzma libraries check via command line (Dmitriy),
  wrong error column in structured error when parsing end tag (Juergen Keil),
  doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),
  Add methods for python3 iterator (Ron Angeles),
  Support element node traversal in document fragments. (Kyle VanderBeek),
  xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),
  Added macros for argument casts (Eric Zurcher),
  adding init calls to xml and html Read parsing entry points (Daniel Veillard),
  Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),
  Implement choice for name classes on attributes (Shaun McCance),
  Two small namespace tweaks (Daniel Veillard),
  xmllint --memory should fail on empty files (Daniel Veillard),
  Cast encoding name to char pointer to match arg type (Nikolay Sivov)
  
   - Cleanups:
  Removal of old configure.in (Daniel Veillard),
  Unreachable code in tree.c (Gaurav Gupta),
  Remove a couple of dead conditions (Gaurav Gupta),
  Avoid some dead code and cleanup in relaxng.c (Gaurav),
  Drop not needed checks (Denis Pauk),
  Fix a wrong test (Daniel Veillard)
  


2.9.1: Apr 19 2013:
   -  Features:
    Support for Python3 (Daniel Veillard),
    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)
  
   -  Documentation:
    Add documentation for xmllint --xpath (Daniel Veillard),
    Fix the URL of the SAX documentation from James (Daniel Veillard),
    Fix spelling of "length". (Michael Wood)
  
   -  Portability:
    Fix python bindings with versions older than 2.7 (Daniel Veillard),
    rebuild docs:Makefile.am (Roumen Petrov),
    elfgcchack.h after rebuild in doc (Roumen Petrov),
    elfgcchack for buf module (Roumen Petrov),
    Fix a uneeded and wrong extra link parameter (Daniel Veillard),
    Few cleanup patches for Windows (Denis Pauk),
    Fix rpmbuild --nocheck (Mark Salter),
    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),
    Fix Broken multi-arch support in xml2-config (Daniel Veillard),
    Fix a portability issue for GCC < 3.4.0 (Daniel Veillard),
    Windows build fixes (Daniel Richard),
    Fix a thread portability problem (Friedrich Haubensak),
    Downgrade autoconf requirement to 2.63 (Daniel Veillard)
  
   -  Bug Fixes:
    Fix a linking error for python bindings (Daniel Veillard),
    Fix a couple of return without value (Jüri Aedla),
    Improve the hashing functions (Daniel Franke),
    Improve handling of xmlStopParser() (Daniel Veillard),
    Remove risk of lockup in dictionary initialization (Daniel Veillard),
    Activate detection of encoding in external subset (Daniel Veillard),
    Fix an output buffer flushing conversion bug (Mikhail Titov),
    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),
    Fix configure cannot remove messages (Gilles Espinasse),
    fix schema validation in combination with xsi:nil (Daniel Veillard),
    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),
    Fix a few problems with setEntityLoader (Alexey Neyman),
    Detect excessive entities expansion upon replacement (Daniel Veillard),
    Fix the flushing out of raw buffers on encoding conversions (Daniel,
Veillard),
    Fix some buffer conversion issues (Daniel Veillard),
    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,
Veillard),
    Fix an error in the progressive DTD parsing code (Dan Winship),
    xmllint should not load DTD by default when using the reader (Daniel,
Veillard),
    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),
    Fix potential out of bound access (Daniel Veillard),
    Fix large parse of file from memory (Daniel Veillard),
    Fix a bug in the nsclean option of the parser (Daniel Veillard),
    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,
Veillard),
    Remove potential calls to exit() (Daniel Veillard)
  
   -  Improvements:
    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),
    Fix tree iterators broken by 2to3 script (Daniel Veillard),
    update all tests for Python3 and Python2 (Daniel Veillard),
    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),
    Fix compilation on Python3 (Daniel Veillard),
    Converting apibuild.py to python3 (Daniel Veillard),
    First pass at starting porting to python3 (Daniel Veillard),
    updated configure.in for python3 (Daniel Veillard),
    Add support for xpathRegisterVariable in Python (Shaun McCance),
    Added a regression tests from bug 694228 data (Daniel Veillard),
    Cache presence of '<' in entities content (Daniel Veillard),
    Avoid extra processing on entities (Daniel Veillard),
    Python binding for xmlRegisterInputCallback (Alexey Neyman),
    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),
    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),
    Adding streaming validation to runtest checks (Daniel Veillard),
    Add a --pushsmall option to xmllint (Daniel Veillard)
  
   -  Cleanups:
    Switched comment in file to UTF-8 encoding (Daniel Veillard),
    Extend gitignore (Daniel Veillard),
    Silent the new python test on input (Alexey Neyman),
    Cleanup of a duplicate test (Daniel Veillard),
    Cleanup on duplicate test expressions (Daniel Veillard),
    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,
Gansterer),
    Spec cleanups and a fix for multiarch support (Daniel Veillard),
    Silence a clang warning (Daniel Veillard),
    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),
    rand_seed should be static in dict.c (Wouter Van Rooy),
    Fix typos in parser comments (Jan Pokorný)
  


2.9.0: Sep 11 2012:
   -  Features:
    A few new API entry points,
    More resilient push parser mode,
    A lot of portability improvement,
    Faster XPath evaluation
  
   -  Documentation:
    xml2-config.1 markup error (Christian Weisgerber),
    libxml(3) manpage typo fix (John Bradshaw),
    More cleanups to the documentation part of libxml2 (Daniel Richard G)
  
   -  Portability:
    Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),
    fix builds not having stdint.h (Rob Richards),
    GetProcAddressA is available only on WinCE (Daniel Veillard),
    More updates and cleanups on autotools and Makefiles (Daniel Richard G),
    More changes for Win32 compilation (Eric Zurcher),
    Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),
    Bundles all generated files for python into the distribution (Daniel Richard G),
    Fix compiler warnings of wincecompat.c (Patrick Gansterer),
    Fix non __GNUC__ build (Patrick Gansterer),
    Fix windows unicode build (Patrick Gansterer),
    clean redefinition of {v}snprintf in C-source (Roumen Petrov),
    use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),
    fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),
    Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),
    Various "make distcheck" and portability fixups (Daniel Richard G),
    Fix compilation on older Visual Studio (Daniel Veillard)
  
   -  Bug Fixes:
    Change the XPath code to percolate allocation errors (Daniel Veillard),
    Fix reuse of xmlInitParser (Daniel Veillard),
    Fix potential crash on entities errors (Daniel Veillard),
    initialize var (Rob Richards),
    Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),
    Fix problem with specific and generic error handlers (Pietro Cerutti),
    Avoid a potential infinite recursion (Daniel Veillard),
    Fix an XSD error when generating internal automata (Daniel Veillard),
    Patch for xinclude of text using multibyte characters (Vitaly Ostanin),
    Fix a segfault on XSD validation on pattern error (Daniel Veillard),
    Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),
    Add a missing element check (Daniel Veillard),
    Adding various checks on node type though the API (Daniel Veillard),
    Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),
    Fix make dist to include new private header files (Daniel Veillard),
    More fixups on the push parser behaviour (Daniel Veillard),
    Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),
    Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),
    Fixup limits parser (Daniel Veillard),
    Do not fetch external parsed entities (Daniel Veillard),
    Fix an error in previous commit (Aron Xu),
    Fix entities local buffers size problems (Daniel Veillard),
    Fix parser local buffers size problems (Daniel Veillard),
    Fix a failure to report xmlreader parsing failures (Daniel Veillard)
  
   -  Improvements:
    Keep libxml2.syms when running "make distclean" (Daniel Veillard),
    Allow to set the quoting character of an xmlWriter (Csaba Raduly),
    Keep non-significant blanks node in HTML parser (Daniel Veillard),
    Add a forbidden variable error number and message to XPath (Daniel Veillard),
    Support long path names on WNT (Michael Stahl),
    Improve HTML escaping of attribute on output (Daniel Veillard),
    Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),
    Switching XPath node sorting to Timsort (Vojtech Fried),
    Optimizing '//' in XPath expressions (Nick Wellnhofer),
    Expose xmlBufShrink in the public tree API (Daniel Veillard),
    Visible HTML elements close the head tag (Conrad Irwin),
    Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),
    Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),
    minimize use of HAVE_CONFIG_H (Roumen Petrov),
    fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),
    Add support for big line numbers in error reporting (Daniel Veillard),
    Avoid using xmlBuffer for serialization (Daniel Veillard),
    Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),
    Provide new accessors for xmlOutputBuffer (Daniel Veillard),
    Improvements for old buffer compatibility (Daniel Veillard),
    Expand the limit test program (Daniel Veillard),
    Improve error reporting on parser errors (Daniel Veillard),
    Implement some default limits in the XPath module (Daniel Veillard),
    Introduce some default parser limits (Daniel Veillard),
    Cleanups and new limit APIs for dictionaries (Daniel Veillard),
    Fixup for buf.c (Daniel Veillard),
    Cleanup URI module memory allocation code (Daniel Veillard),
    Extend testlimits (Daniel Veillard),
    More avoid quadratic behaviour (Daniel Veillard),
    Impose a reasonable limit on PI size (Daniel Veillard),
    first version of testlimits new test (Daniel Veillard),
    Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),
    Impose a reasonable limit on comment size (Daniel Veillard),
    Impose a reasonable limit on attribute size (Daniel Veillard),
    Harden the buffer code and make it more compatible (Daniel Veillard),
    More cleanups for input/buffers code (Daniel Veillard),
    Cleanup function xmlBufResetInput(), to set input from Buffer (Daniel Veillard)
    Swicth the test program for characters to new input buffers (Daniel Veillard),
    Convert the HTML tree module to the new buffers (Daniel Veillard),
    Convert of the HTML parser to new input buffers (Daniel Veillard),
    Convert the writer to new output buffer and save APIs (Daniel Veillard),
    Convert XMLReader to the new input buffers (Daniel Veillard),
    New saving functions using xmlBuf and conversion (Daniel Veillard),
    Provide new xmlBuf based saving functions (Daniel Veillard),
    Convert XInclude to the new input buffers (Daniel Veillard),
    Convert catalog code to the new input buffers (Daniel Veillard),
    Convert C14N to the new Input buffer (Daniel Veillard),
    Convert xmlIO.c to the new input and output buffers (Daniel Veillard),
    Convert XML parser to the new input buffers (Daniel Veillard),
    Incompatible change to the Input and Output buffers (Daniel Veillard),
    Adding new encoding function to deal with the new structures (Daniel Veillard),
    Convert XPath to xmlBuf (Daniel Veillard),
    Adding a new buf module for buffers (Daniel Veillard),
    Memory error within SAX2 reuse common framework (Daniel Veillard),
    Fix xmllint --xpath node initialization (Daniel Veillard)
  
   -  Cleanups:
    Various cleanups to avoid compiler warnings (Daniel Veillard),
    Big space and tab cleanup (Daniel Veillard),
    Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),
    Second round of cleanups for LibXML2 docs/examples (Daniel Richard),
    Remove all .cvsignore as they are not used anymore (Daniel Veillard),
    Fix a Timsort function helper comment (Daniel Veillard),
    Small cleanup for valgrind target (Daniel Veillard),
    Patch for portability of latin characters in C files (Daniel Veillard),
    Cleanup some of the parser code (Daniel Veillard),
    Fix a variable name in comment (Daniel Veillard),
    Regenerated testapi.c (Daniel Veillard),
    Regenerating docs and API files (Daniel Veillard),
    Small cleanup of unused variables in test (Daniel Veillard),
    Expand .gitignore with more files (Daniel Veillard)
  


2.8.0: May 23 2012:
   - Features:
  add lzma compression support (Anders F Bjorklund)
  
   - Documentation:
    xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä),
    Update README.tests (Daniel Veillard),
    URI handling code is not OOM resilient (Daniel Veillard),
    Fix an error in comment (Daniel Veillard),
    Fixed bug #617016 (Daniel Mustieles),
    Fixed two typos in the README document (Daniel Neel),
    add generated html files (Anders F Bjorklund),
    Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard),
    Improve documentation a bit (Daniel Veillard),
    Updated URL for lxml python bindings (Daniel Veillard)
  
   - Portability:
    Restore code for Windows compilation (Daniel Veillard),
    Remove git error message during configure (Christian Dywan),
    xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer),
    remove a bashism in confgure.in (John Hein),
    undef ERROR if already defined (Patrick R. Gansterer),
    Fix library problems with mingw-w64 (Michael Cronenworth),
    fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards),
    prefer native threads on win32 (Sam Thursfield),
    Allow to compile with Visual Studio 2010 (Thomas Lemm),
    Fix mingw's snprintf configure check (Andoni Morales),
    fixed a 64bit big endian issue (Marcus Meissner),
    Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard),
    Fix windows build from lzma addition (Rob Richards),
    autogen: Only check for libtoolize (Colin Walters),
    Fix the Windows build files (Patrick von Reth),
    634846 Remove a linking option breaking Windows VC10 (Daniel Veillard),
    599241 fix an initialization problem on Win64 (Andrew W. Nosenko),
    fix win build (Rob Richards)
  
   - Bug fixes:
    Part for rand_r checking missing (Daniel Veillard),
    Cleanup on randomization (Daniel Veillard),
    Fix undefined reference in python module (Pacho Ramos),
    Fix a race in xmlNewInputStream (Daniel Veillard),
    Fix weird streaming RelaxNG errors (Noam),
    Fix various bugs in new code raised by the API checking (Daniel Veillard),
    Fix various problems with "make dist" (Daniel Veillard),
    Fix a memory leak in the xzlib code (Daniel Veillard),
    HTML parser error with <noscript> in the <head> (Denis Pauk),
    XSD: optional element in complex type extension (Remi Gacogne),
    Fix html serialization error and htmlSetMetaEncoding() (Daniel Veillard),
    Fix a wrong return value in previous patch (Daniel Veillard),
    Fix an uninitialized variable use (Daniel Veillard),
    Fix a compilation problem with --minimum (Brandon Slack),
    Remove redundant and ungarded include of resolv.h (Daniel Veillard),
    xinclude with parse="text" does not use the entity loader (Shaun McCance),
    Allow to parse 1 byte HTML files (Denis Pauk),
    Patch that fixes the skipping of the HTML_PARSE_NOIMPLIED flag (Martin Schröder),
    Avoid memory leak if xmlParserInputBufferCreateIO fails (Lin Yi-Li),
    Prevent an infinite loop when dumping a node with encoding problems (Timothy Elliott),
    xmlParseNodeInContext problems with an empty document (Tim Elliott),
    HTML element position is not detected propperly (Pavel Andrejs),
    Fix an off by one pointer access (Jüri Aedla),
    Try to fix a problem with entities in SAX mode (Daniel Veillard),
    Fix a crash with xmllint --path on empty results (Daniel Veillard),
    Fixed bug #667946 (Daniel Mustieles),
    Fix a logic error in Schemas Component Constraints (Ryan Sleevi),
    Fix a wrong enum type use in Schemas Types (Nico Weber),
    Fix SAX2 builder in case of undefined attributes namespace (Daniel Veillard),
    Fix SAX2 builder in case of undefined element namespaces (Daniel Veillard),
    fix reference to STDOUT_FILENO on MSVC (Tay Ray Chuan),
    fix a pair of possible out of array char references (Daniel Veillard),
    Fix an allocation error when copying entities (Daniel Veillard),
    Make sure the parser returns when getting a Stop order (Chris Evans),
    Fix some potential problems on reallocation failures(parser.c) (Xia Xinfeng),
    Fix a schema type duration comparison overflow (Daniel Veillard),
    Fix an unimplemented part in RNG value validation (Daniel Veillard),
    Fix missing error status in XPath evaluation (Daniel Veillard),
    Hardening of XPath evaluation (Daniel Veillard),
    Fix an off by one error in encoding (Daniel Veillard),
    Fix RELAX NG include bug #655288 (Shaun McCance),
    Fix XSD validation bug #630130 (Toyoda Eizi),
    Fix some potential problems on reallocation failures (Chris Evans),
    __xmlRaiseError: fix use of the structured callback channel (Dmitry V. Levin),
    __xmlRaiseError: fix the structured callback channel's data initialization (Dmitry V. Levin),
    Fix memory corruption when xmlParseBalancedChunkMemoryInternal is called from xmlParseBalancedChunk (Rob Richards),
    Small fix for previous commit (Daniel Veillard),
    Fix a potential freeing error in XPath (Daniel Veillard),
    Fix a potential memory access error (Daniel Veillard),
    Reactivate the shared library versionning script (Daniel Veillard)
  
   - Improvements:
    use mingw C99 compatible functions {v}snprintf instead those from MSVC runtime (Roumen Petrov),
    New symbols added for the next release (Daniel Veillard),
    xmlTextReader bails too quickly on error (Andy Lutomirski),
    Use a hybrid allocation scheme in xmlNodeSetContent (Conrad Irwin),
    Use buffers when constructing string node lists. (Conrad Irwin),
    Add HTML parser support for HTML5 meta charset encoding declaration (Denis Pauk),
    wrong message for double hyphen in comment XML error (Bryan Henderson),
    Fix "make tst" to grab lzma lib too (Daniel Veillard),
    Add "whereis" command to xmllint shell (Ryan),
    Improve xmllint shell (Ryan),
    add function xmlTextReaderRelaxNGValidateCtxt() (Noam Postavsky),
    Add --system support to autogen.sh (Daniel Veillard),
    Add hash randomization to hash and dict structures (Daniel Veillard),
    included xzlib in dist (Anders F Bjorklund),
    move xz/lzma helpers to separate included files (Anders F Bjorklund),
    add generated devhelp files (Anders F Bjorklund),
    add XML_WITH_LZMA to api (Anders F Bjorklund),
    autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters),
    Improve the error report on undefined REFs (Daniel Veillard),
    Add exception for new W3C PI xml-model (Daniel Veillard),
    Add options to ignore the internal encoding (Daniel Veillard),
    testapi: use the right type for the check (Stefan Kost),
    various: handle return values of write calls (Stefan Kost),
    testWriter: xmlTextWriterWriteFormatElement wants an int instead of a long int (Stefan Kost),
    runxmlconf: update to latest testsuite version (Stefan Kost),
    configure: add -Wno-long-long to CFLAGS (Stefan Kost),
    configure: support silent automake rules if possible (Stefan Kost),
    xmlmemory: add a cast as size_t has no portable printf modifier (Stefan Kost),
    __xmlRaiseError: remove redundant schannel initialization (Dmitry V. Levin),
    __xmlRaiseError: do cheap code check early (Dmitry V. Levin)
  
   - Cleanups:
    Cleanups before 2.8.0-rc2 (Daniel Veillard),
    Avoid an extra operation (Daniel Veillard),
    Remove vestigial de-ANSI-fication support. (Javier Jardón),
    autogen.sh: Fix typo (Javier Jardón),
    Do not use unsigned but unsigned int (Daniel Veillard),
    Remove two references to u_short (Daniel Veillard),
    Fix -Wempty-body warning from clang (Nico Weber),
    Cleanups of lzma support (Daniel Veillard),
    Augment the list of ignored files (Daniel Veillard),
    python: remove unused variable (Stefan Kost),
    python: flag two unused args (Stefan Kost),
    configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost),
    xpath: remove unused variable (Stefan Kost)
  


2.7.8: Nov 4 2010:
   -  Features:
    480323 add code to plug in ICU converters by default (Giuseppe Iuculano),
    Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg)
  
   -  Documentation:
    Fix devhelp documentation installation (Mike Hommey),
    Fix web site encoding problems (Daniel Veillard),
    Fix a couple of typo in HTML parser error messages (Michael Day),
    Forgot to update the news page for 0.7.7 (Daniel Veillard)
  
   -  Portability:
    607273 Fix python detection on MSys/Windows (LRN),
    614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer),
    Fix compilation with Clang (Koop Mast),
    Fix Win32 build (Rob Richards)
  
   -  Bug Fixes:
    595789 fix a remaining potential Solaris problem (Daniel Veillard),
    617468 fix progressive HTML parsing with style using "'" (Denis Pauk),
    616478 Fix xmllint shell write command (Gwenn Kahz),
    614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile),
    627987 Fix XSD IDC errors in imported schemas (Jim Panetta),
    629325 XPath rounding errors first cleanup (Phil Shafer),
    630140 fix iso995x encoding error (Daniel Veillard),
    make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard),
    Fix a change of semantic on XPath preceding and following axis (Daniel Veillard),
    Fix a potential segfault due to weak symbols on pthreads (Mike Hommey),
    Fix a leak in XPath compilation (Daniel Veillard),
    Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard),
    Avoid a descriptor leak in catalog loading code (Carlo Bramini),
    Fix a small bug in XPath evaluation code (Marius Wachtler),
    Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard),
    Fix errors in XSD double validation check (Csaba Raduly),
    Fix handling of apos in URIs (Daniel Veillard),
    xmlTextReaderReadOuterXml should handle DTD (Rob Richards),
    Autogen.sh needs to create m4 directory (Rob Richards)
  
   -  Improvements:
    606592 update language ID parser to RFC 5646 (Daniel Veillard),
    Sort python generated stubs (Mike Hommey),
    Add an HTML parser option to avoid a default doctype (Daniel Veillard)
  
   -  Cleanups:
    618831 don't ship generated files in git (Adrian Bunk),
    Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk),
    Various cleanups on encoding handling (Daniel Veillard),
    Fix xmllint to use format=1 for default formatting (Adam Spragg),
    Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg),
    Cleanup encoding pointer comparison (Nikolay Sivov),
    Small code cleanup on previous patch (Daniel Veillard)
  


2.7.7: Mar 15 2010:
   -  Improvements:
    Adding a --xpath option to xmllint (Daniel Veillard),
    Make HTML parser non-recursive (Eugene Pimenov)
  
   -  Portability:
    relaxng.c: cast to allow compilation with sun studio 11 (Ben Walton),
    Fix build failure on Sparc solaris (Roumen Petrov),
    use autoreconf in autogen.sh (Daniel Veillard),
    Fix build with mingw (Roumen Petrov),
    Upgrade some of the configure and autogen (Daniel Veillard),
    Fix relaxNG tests in runtest for Windows runtest.c: initialize ret (Rob Richards),
    Fix a const warning in xmlNodeSetBase (Martin Trappel),
    Fix python generator to not use deprecated xmllib (Daniel Veillard),
    Update some automake files (Daniel Veillard),
    598785 Fix nanohttp on Windows (spadix)
  
   -  Bug Fixes:
    libxml violates the zlib interface and crashes (Mark Adler),
    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
    Fix  missing win32 libraries in libxml-2.0.pc (Volker Grabsch),
    Fix detection of python linker flags (Daniel Macks),
    fix build error in libxml2/python (Paul Smith),
    ChunkParser: Incorrect decoding of small xml files (Raul Hudea),
    htmlCheckEncoding doesn't update input-end after shrink (Eugene Pimenov),
    Fix a missing #ifdef (Daniel Veillard),
    Fix encoding selection for xmlParseInNodeContext (Daniel Veillard),
    xmlPreviousElementSibling mistake (FranÃ§ois Delyon),
    608773 add a missing check in xmlGROW (Daniel Veillard),
    Fix xmlParseInNodeContext for HTML content (Daniel Veillard),
    Fix lost namespace when copying node * tree.c: reconcile namespace if not found (Rob Richards),
    Fix some missing commas in HTML element lists (Eugene Pimenov),
    Correct variable type to unsigned (Nikolay Sivov),
    Recognize ID attribute in HTML without DOCTYPE (Daniel Veillard),
    Fix memory leak in xmlXPathEvalExpression() (Martin),
    Fix an init bug in global.c (Kai Henning),
    Fix xmlNodeSetBase() comment (Daniel Veillard),
    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
    Don't give default HTML boolean attribute values in parser (Daniel Veillard),
    xmlCtxtResetLastError should reset ctxt-errNo (Daniel Veillard)
  
   -  Cleanups:
    Cleanup a couple of weirdness in HTML parser (Eugene Pimenov)
  


2.7.6: Oct  6 2009:
   -  Bug Fixes:
     Restore thread support in default configuration (Andrew W. Nosenko),
     URI with no path parsing problem (Daniel Veillard),
     Minor patch for conditional defines in threads.c (Eric Zurcher)
  


2.7.5: Sep 24 2009:
   -  Bug Fixes:
    Restore behavior of --with-threads without argument (Andrew W. Nosenko),
    Fix memory leak when doc is NULL (Rob Richards),
    595792 fixing a RelaxNG bug introduced in 2.7.4 (Daniel Veillard),
    Fix a Relaxng bug raised by libvirt test suite (Daniel Veillard),
    Fix a parsing problem with little data at startup (Daniel Veillard),
    link python module with python library (Frederic Crozat),
    594874 Forgot an fclose in xmllint (Daniel Veillard)
  
   -  Cleanup:
    Adding symbols.xml to EXTRA_DIST (Daniel Veillard)
  


2.7.4: Sep 10 2009:
   - Improvements:
    Switch to GIT (GNOME),
    Add symbol versioning to libxml2 shared libs (Daniel Veillard)
  
   - Portability:
    593857 try to work around thread pbm MinGW 4.4 (Daniel Veillard),
    594250 rename ATTRIBUTE_ALLOC_SIZE to avoid clashes (Daniel Veillard),
    Fix Windows build * relaxng.c: fix windows build (Rob Richards),
    Fix the globals.h to use XMLPUBFUN (Paul Smith),
    Problem with extern extern in header (Daniel Veillard),
    Add -lnetwork for compiling on Haiku (Scott McCreary),
    Runtest portability patch for Solaris (Tim Rice),
    Small patch to accomodate the Haiku OS (Scott McCreary),
    584605 package VxWorks folder in the distribution (Daniel Veillard),
    574017 Realloc too expensive on most platform (Daniel Veillard),
    Fix windows build (Rob Richards),
    545579 doesn't compile without schema support (Daniel Veillard),
    xmllint use xmlGetNodePath when not compiled in (Daniel Veillard),
    Try to avoid __imp__xmlFree link trouble on msys (Daniel Veillard),
    Allow to select the threading system on Windows (LRN),
    Fix Solaris binary links, cleanups (Daniel Veillard),
    Bug 571059 â MSVC doesn't work with the bakefile (Intron),
    fix ATTRIBUTE_PRINTF header clash (Belgabor and Mike Hommey),
    fixes for Borland/CodeGear/Embarcadero compilers (Eric Zurcher)
  
   - Documentation:
    544910 typo: "renciliateNs" (Leonid Evdokimov),
    Add VxWorks to list of OSes (Daniel Veillard),
    Regenerate the documentation and update for git (Daniel Veillard),
    560524 Â¿ xmlTextReaderLocalName description (Daniel Veillard),
    Added sponsoring by AOE media for the server (Daniel Veillard),
    updated URLs for GNOME (Vincent Lefevre),
    more warnings about xmlCleanupThreads and xmlCleanupParser (Daniel Veillard)
  
   - Bug fixes:
    594514 memory leaks - duplicate initialization (MOD),
    Wrong block opening in htmlNodeDumpOutputInternal (Daniel Veillard),
    492317 Fix  Relax-NG validation problems (Daniel Veillard),
    558452 fight with reg test and error report (Daniel Veillard),
    558452 RNG compilation of optional multiple child (Daniel Veillard),
    579746 XSD validation not correct / nilable groups (Daniel Veillard),
    502960 provide namespace stack when parsing entity (Daniel Veillard),
    566012 part 2 fix regresion tests and push mode (Daniel Veillard),
    566012 autodetected encoding and encoding conflict (Daniel Veillard),
    584220 xpointer(/) and xinclude problems (Daniel Veillard),
    587663 Incorrect Attribute-Value Normalization (Daniel Veillard),
    444994 HTML chunked failure for attribute with <> (Daniel Veillard),
    Fix end of buffer char being split in XML parser (Daniel Veillard),
    Non ASCII character may be split at buffer end (Adiel Mittmann),
    440226 Add xmlXIncludeProcessTreeFlagsData API (Stefan Behnel),
    572129 speed up parsing of large HTML text nodes (Markus Kull),
    Fix HTML parsing with 0 character in CDATA (Daniel Veillard),
    Fix SetGenericErrorFunc and SetStructured clash (Wang Lam),
    566012  Incomplete EBCDIC parsing support (Martin Kogler),
    541335 HTML avoid creating 2 head or 2 body element (Daniel Veillard),
    541237 error correcting missing end tags in HTML (Daniel Veillard),
    583439 missing line numbers in push mode (Daniel Veillard),
    587867 xmllint --html --xmlout serializing as HTML (Daniel Veillard),
    559501 avoid select and use poll for nanohttp (Raphael Prevost),
    559410 -  Regexp bug on (...)? constructs (Daniel Veillard),
    Fix a small problem on previous HTML parser patch (Daniel Veillard),
    592430 -  HTML parser runs into endless loop (Daniel Veillard),
    447899 potential double free in xmlFreeTextReader (Daniel Veillard),
    446613 small validation bug mixed content with NS (Daniel Veillard),
    Fix the problem of revalidating a doc with RNG (Daniel Veillard),
    Fix xmlKeepBlanksDefault to not break indent (Nick Wellnhofer),
    512131 refs from externalRef part need to be added (Daniel Veillard),
    512131 crash in xmlRelaxNGValidateFullElement (Daniel Veillard),
    588441 allow '.' in HTML Names even if invalid (Daniel Veillard),
    582913 Fix htmlSetMetaEncoding() to be nicer (Daniel Veillard),
    579317 Try to find the HTML encoding information (Daniel Veillard),
    575875 don't output charset=html (Daniel Veillard),
    571271 fix semantic of xsd:all with minOccurs=0 (Daniel Veillard),
    570702 fix a bug in regexp determinism checking (Daniel Veillard),
    567619 xmlValidateNotationUse missing param test (Daniel Veillard),
    574393 Â¿ utf-8 filename magic for compressed files (Hans Breuer),
    Fix a couple of problems in the parser (Daniel Veillard),
    585505 Â¿ Document ids and refs populated by XSD (Wayne Jensen),
    582906 XSD validating multiple imports of the same schema (Jason Childs),
    Bug 582887 Â¿ problems validating complex schemas (Jason Childs),
    Bug 579729 Â¿ fix XSD schemas parsing crash (Miroslav Bajtos),
    576368 Â¿ htmlChunkParser with special attributes (Jiri Netolicky),
    Bug 565747 Â¿ relax anyURI data character checking (Vincent Lefevre),
    Preserve attributes of include start on tree copy (Petr Pajas),
    Skip silently unrecognized XPointer schemes (Jakub Wilk),
    Fix leak on SAX1, xmllint --sax1 option and debug (Daniel Veillard),
    potential NULL dereference on non-glibc (Jim Meyering),
    Fix an XSD validation crash (Daniel Veillard),
    Fix a regression in streaming entities support (Daniel Veillard),
    Fix a couple of ABI issues with C14N 1.1 (Aleksey Sanin),
    Aleksey Sanin support for c14n 1.1 (Aleksey Sanin),
    reader bug fix with entities (Daniel Veillard),
    use options from current parser ctxt for external entities (Rob Richards),
    581612 use %s to printf strings (Christian Persch),
    584605 change the threading initialization sequence (Igor Novoseltsev),
    580705 keep line numbers in HTML parser (Aaron Patterson),
    581803 broken HTML table attributes init (Roland Steiner),
    do not set error code in xmlNsWarn (Rob Richards),
    564217 fix structured error handling problems,
    reuse options from current parser for entities (Rob Richards),
    xmlXPathRegisterNs should not allow enpty prefixes (Daniel Veillard),
    add a missing check in xmlAddSibling (Kris Breuker),
    avoid leaks on errors (Jinmei Tatuya)
  
   - Cleanup:
    Chasing dead assignments reported by clang-scan (Daniel Veillard),
    A few more safety cleanup raised by scan (Daniel Veillard),
    Fixing assorted potential problems raised by scan (Daniel Veillard),
    Potential uninitialized arguments raised by scan (Daniel Veillard),
    Fix a bunch of scan 'dead increments' and cleanup (Daniel Veillard),
    Remove a pedantic warning (Daniel Veillard),
    555833 always use rm -f in uninstall-local (Daniel Veillard),
    542394 xmlRegisterOutputCallbacks MAX_INPUT_CALLBACK (Daniel Veillard),
    Autoregenerate libxml2.syms automated checkings (Daniel Veillard),
    Make xmlRecoverDoc const (Martin Trappel) (Daniel Veillard),
    Both args of xmlStrcasestr are const (Daniel Veillard),
    hide the nbParse* variables used for debugging (Mike Hommey),
    570806 changed include of config.h (William M. Brack),
    cleanups and error reports when xmlTextWriterVSprintf fails (Jinmei Tatuya)
  


2.7.3: Jan 18 2009:
   - Build fix: fix build when HTML support is not included.
   - Bug fixes: avoid memory overflow in gigantic text nodes,
      indentation problem on the writed (Rob Richards),
      xmlAddChildList pointer problem (Rob Richards and Kevin Milburn),
      xmlAddChild problem with attribute (Rob Richards and Kris Breuker),
      avoid a memory leak in an edge case (Daniel Zimmermann),
      deallocate some pthread data (Alex Ott).
   - Improvements: configure option to avoid rebuilding docs (Adrian Bunk),
      limit text nodes to 10MB max by default, add element traversal
      APIs, add a parser option to enable pre 2.7 SAX behavior (Rob Richards),
      add gcc malloc checking (Marcus Meissner), add gcc printf like functions
      parameters checking (Marcus Meissner).


2.7.2: Oct 3 2008:
   - Portability fix: fix solaris compilation problem, fix compilation
        if XPath is not configured in
   - Bug fixes: nasty entity bug introduced in 2.7.0, restore old behaviour
        when saving an HTML doc with an xml dump function, HTML UTF-8 parsing
        bug, fix reader custom error handlers (Riccardo Scussat)
    
   - Improvement: xmlSave options for more flexibility to save as
        XML/HTML/XHTML, handle leading BOM in HTML documents


2.7.1: Sep 1 2008:
   - Portability fix: Borland C fix (Moritz Both)
   - Bug fixes: python serialization wrappers, XPath QName corner
        case handking and leaks (Martin)
   - Improvement: extend the xmlSave to handle HTML documents and trees
   - Cleanup: python serialization wrappers


2.7.0: Aug 30 2008:
   - Documentation: switch ChangeLog to UTF-8, improve mutithreads and
      xmlParserCleanup docs
   - Portability fixes: Older Win32 platforms (Rob Richards), MSVC
      porting fix (Rob Richards), Mac OS X regression tests (Sven Herzberg),
      non GNUCC builds (Rob Richards), compilation on Haiku (Andreas FÃ¤rber)
      
   - Bug fixes: various realloc problems (Ashwin), potential double-free
      (Ashwin), regexp crash, icrash with invalid whitespace facets (Rob
      Richards), pattern fix when streaming (William Brack), various XML
      parsing and validation fixes based on the W3C regression tests, reader
      tree skipping function fix (Ashwin), Schemas regexps escaping fix
      (Volker Grabsch), handling of entity push errors (Ashwin), fix a slowdown
      when encoder cant serialize characters on output
   - Code cleanup: compilation fix without the reader, without the output
      (Robert Schwebel), python whitespace (Martin), many space/tabs cleanups,
      serious cleanup of the entity handling code
   - Improvement: switch parser to XML-1.0 5th edition, add parsing flags
      for old versions, switch URI parsing to RFC 3986,
      add xmlSchemaValidCtxtGetParserCtxt (Holger Kaelberer),
      new hashing functions for dictionnaries (based on Stefan Behnel work),
      improve handling of misplaced html/head/body in HTML parser, better
      regression test tools and code coverage display, better algorithms
      to detect various versions of the billion laughts attacks, make
      arbitrary parser limits avoidable as a parser option


2.6.32: Apr 8 2008:
   - Documentation: returning heap memory to kernel (Wolfram Sang),
      trying to clarify xmlCleanupParser() use, xmlXPathContext improvement
      (Jack Jansen), improve the *Recover* functions documentation,
      XmlNodeType doc link fix (Martijn Arts)
   - Bug fixes: internal subset memory leak (Ashwin), avoid problem with
      paths starting with // (Petr Sumbera), streaming XSD validation callback
      patches (Ashwin), fix redirection on port other than 80 (William Brack),
      SAX2 leak (Ashwin), XInclude fragment of own document (Chris Ryan),
      regexp bug with '.' (Andrew Tosh), flush the writer at the end of the
      document (Alfred Mickautsch), output I/O bug fix (William Brack),
      writer CDATA output after a text node (Alex Khesin), UTF-16 encoding
      detection (William Brack), fix handling of empty CDATA nodes for Safari
      team, python binding problem with namespace nodes, improve HTML parsing
      (Arnold Hendriks), regexp automata build bug, memory leak fix (Vasily
      Chekalkin), XSD test crash, weird system parameter entity parsing problem,
      allow save to file:///X:/ windows paths, various attribute normalisation
      problems, externalSubsetSplit fix (Ashwin), attribute redefinition in
      the DTD (Ashwin), fix in char ref parsing check (Alex Khesin), many
      out of memory handling fixes (Ashwin), XPath out of memory handling fixes
      (Alvaro Herrera), various realloc problems (Ashwin), UCS4 encoding
      conversion buffer size (Christian Fruth), problems with EatName
      functions on memory errors, BOM handling in external parsed entities
      (Mark Rowe)
   - Code cleanup: fix build under VS 2008 (David Wimsey), remove useless
      mutex in xmlDict (Florent Guilian), Mingw32 compilation fix (Carlo
      Bramini), Win and MacOS EOL cleanups (Florent Guiliani), iconv need
      a const detection (Roumen Petrov), simplify xmlSetProp (Julien Charbon),
      cross compilation fixes for Mingw (Roumen Petrov), SCO Openserver build
      fix (Florent Guiliani), iconv uses const on Win32 (Rob Richards),
      duplicate code removal (Ashwin), missing malloc test and error reports
      (Ashwin), VMS makefile fix (Tycho Hilhorst)
   - improvements: better plug of schematron in the normal error handling
      (Tobias Minich)


2.6.31: Jan 11 2008:
   - Security fix: missing of checks in UTF-8 parsing
   - Bug fixes: regexp bug, dump attribute from XHTML document, fix
      xmlFree(NULL) to not crash in debug mode, Schematron parsing crash
      (Rob Richards), global lock free on Windows (Marc-Antoine Ruel),
      XSD crash due to double free (Rob Richards), indentation fix in
      xmlTextWriterFullEndElement (Felipe Pena), error in attribute type
      parsing if attribute redeclared, avoid crash in hash list scanner if
      deleting elements, column counter bug fix (Christian Schmidt),
      HTML embed element saving fix (Stefan Behnel), avoid -L/usr/lib
      output from xml2-config (Fred Crozat), avoid an xmllint crash 
      (Stefan Kost), don't stop HTML parsing on out of range chars.
      
   - Code cleanup: fix open() call third argument, regexp cut'n paste
      copy error, unused variable in __xmlGlobalInitMutexLock (Hannes Eder),
      some make distcheck realted fixes (John Carr)
   - Improvements: HTTP Header: includes port number (William Brack),
      testURI --debug option, 


2.6.30: Aug 23 2007:
   - Portability: Solaris crash on error handling, windows path fixes
      (Roland Schwarz and Rob Richards), mingw build (Roland Schwarz)
   - Bugfixes: xmlXPathNodeSetSort problem (William Brack), leak when
      reusing a writer for a new document (Dodji Seketeli), Schemas
      xsi:nil handling patch (Frank Gross), relative URI build problem
      (Patrik Fimml), crash in xmlDocFormatDump, invalid char in comment
      detection bug, fix disparity with xmlSAXUserParseMemory, automata
      generation for complex regexp counts problems, Schemas IDC import
      problems (Frank Gross), xpath predicate evailation error handling
      (William Brack)


2.6.29: Jun 12 2007:
   - Portability: patches from Andreas Stricke for WinCEi,
      fix compilation warnings (William Brack), avoid warnings on Apple OS/X
      (Wendy Doyle and Mark Rowe), Windows compilation and threading
      improvements (Rob Richards), compilation against old Python versions,
      new GNU tar changes (Ryan Hill)
   - Documentation: xmlURIUnescapeString comment, 
   - Bugfixes: xmlBufferAdd problem (Richard Jones), 'make valgrind'
      flag fix (Richard Jones), regexp interpretation of \,
      htmlCreateDocParserCtxt (Jean-Daniel Dupas), configure.in
      typo (Bjorn Reese), entity content failure, xmlListAppend() fix
      (Georges-AndrÃ© Silber), XPath number serialization (William Brack),
      nanohttp gzipped stream fix (William Brack and Alex Cornejo),
      xmlCharEncFirstLine typo (Mark Rowe), uri bug (FranÃ§ois Delyon),
      XPath string value of PI nodes (William Brack), XPath node set
      sorting bugs (William Brack), avoid outputting namespace decl
      dups in the writer (Rob Richards), xmlCtxtReset bug, UTF-8 encoding
      error handling, recustion on next in catalogs, fix a Relax-NG crash,
      workaround wrong file: URIs, htmlNodeDumpFormatOutput on attributes,
      invalid character in attribute detection bug, big comments before 
      internal subset streaming bug, HTML parsing of attributes with : in
      the name, IDness of name in HTML (Dagfinn I. MannsÃ¥ker) 
   - Improvement: keep URI query parts in raw form (Richard Jones),
      embed tag support in HTML (Michael Day) 


2.6.28: Apr 17 2007:
   - Documentation: comment fixes (Markus Keim), xpath comments fixes too
      (James Dennett)
   - Bug fixes: XPath bug (William Brack), HTML parser autoclose stack usage
      (Usamah Malik), various regexp bug fixes (DV and William), path conversion
      on Windows (Igor Zlatkovic), htmlCtxtReset fix (Michael Day), XPath
      principal node of axis bug, HTML serialization of some codepoint
      (Steven Rainwater), user data propagation in XInclude (Michael Day),
      standalone and XML decl detection (Michael Day), Python id ouptut
      for some id, fix the big python string memory leak, URI parsing fixes
      (StÃ©phane Bidoul and William), long comments parsing bug (William),
      concurrent threads initialization (Ted Phelps), invalid char
      in text XInclude (William), XPath memory leak (William), tab in
      python problems (Andreas Hanke), XPath node comparison error
      (Oleg Paraschenko), cleanup patch for reader (Julien Reichel),
      XML Schemas attribute group (William), HTML parsing problem (William),
      fix char 0x2d in regexps (William), regexp quantifier range with
      min occurs of 0 (William), HTML script/style parsing (Mike Day)
   - Improvement: make xmlTextReaderSetup() public
   - Compilation and postability: fix a missing include problem (William),
      __ss_familly on AIX again (BjÃ¶rn Wiberg), compilation without zlib
      (Michael Day), catalog patch for Win32 (Christian Ehrlicher),
      Windows CE fixes (Andreas Stricke)
   - Various CVS to SVN infrastructure changes


2.6.27: Oct 25 2006:
   - Portability fixes: file names on windows (Roland Schwingel, 
      Emelyanov Alexey), windows compile fixup (Rob Richards), 
      AIX iconv() is apparently case sensitive
   - improvements: Python XPath types mapping (Nic Ferrier), XPath optimization
      (Kasimier), add xmlXPathCompiledEvalToBoolean (Kasimier), Python node
      equality and comparison (Andreas Pakulat), xmlXPathCollectAndTest
      improvememt (Kasimier), expose if library was compiled with zlib 
      support (Andrew Nosenko), cache for xmlSchemaIDCMatcher structs
      (Kasimier), xmlTextConcat should work with comments and PIs (Rob
      Richards), export htmlNewParserCtxt needed by Michael Day, refactoring
      of catalog entity loaders (Michael Day), add XPointer support to 
      python bindings (Ross Reedstrom, Brian West and Stefan Anca), 
      try to sort out most file path to URI conversions and xmlPathToUri,
      add --html --memory case to xmllint
   - building fix: fix --with-minimum (Felipe Contreras), VMS fix, 
      const'ification of HTML parser structures (Matthias Clasen),
      portability fix (Emelyanov Alexey), wget autodetection (Peter
      Breitenlohner),  remove the build path recorded in the python
      shared module, separate library flags for shared and static builds
      (Mikhail Zabaluev), fix --with-minimum --with-sax1 builds, fix
      --with-minimum --with-schemas builds
   - bug fix: xmlGetNodePath fix (Kasimier), xmlDOMWrapAdoptNode and
      attribute (Kasimier), crash when using the recover mode, 
      xmlXPathEvalExpr problem (Kasimier), xmlXPathCompExprAdd bug (Kasimier),
      missing destry in xmlFreeRMutex (Andrew Nosenko), XML Schemas fixes
      (Kasimier), warning on entities processing, XHTML script and style
      serialization (Kasimier), python generator for long types, bug in
      xmlSchemaClearValidCtxt (Bertrand Fritsch), xmlSchemaXPathEvaluate
      allocation bug (Marton Illes), error message end of line (Rob Richards),
      fix attribute serialization in writer (Rob Richards), PHP4 DTD validation
      crasher, parser safety patch (Ben Darnell), _private context propagation
      when parsing entities (with Michael Day), fix entities behaviour when 
      using SAX, URI to file path fix (Mikhail Zabaluev), disapearing validity
      context, arg error in SAX callback (Mike Hommey), fix mixed-content
      autodetect when using --noblanks, fix xmlIOParseDTD error handling,
      fix bug in xmlSplitQName on special Names, fix Relax-NG element content
      validation bug, fix xmlReconciliateNs bug, fix potential attribute 
      XML parsing bug, fix line/column accounting in XML parser, chunking bug
      in the HTML parser on script, try to detect obviously buggy HTML
      meta encoding indications, bugs with encoding BOM and xmlSaveDoc, 
      HTML entities in attributes parsing, HTML minimized attribute values,
      htmlReadDoc and htmlReadIO were broken, error handling bug in
      xmlXPathEvalExpression (Olaf Walkowiak), fix a problem in
      htmlCtxtUseOptions, xmlNewInputFromFile could leak (Marius Konitzer),
      bug on misformed SSD regexps (Christopher Boumenot)
      
   - documentation: warning about XML_PARSE_COMPACT (Kasimier Buchcik),
      fix xmlXPathCastToString documentation, improve man pages for
      xmllitn and xmlcatalog (Daniel Leidert), fixed comments of a few
      functions


2.6.26: Jun 6 2006:
   - portability fixes: Python detection (Joseph Sacco), compilation
    error(William Brack and Graham Bennett), LynxOS patch (Olli Savia)
   - bug fixes: encoding buffer problem, mix of code and data in
    xmlIO.c(Kjartan Maraas), entities in XSD validation (Kasimier Buchcik),
    variousXSD validation fixes (Kasimier), memory leak in pattern (Rob
    Richards andKasimier), attribute with colon in name (Rob Richards), XPath
    leak inerror reporting (Aleksey Sanin), XInclude text include of
    selfdocument.
   - improvements: Xpath optimizations (Kasimier), XPath object
    cache(Kasimier)


2.6.25: Jun 6 2006::
Do not use or package 2.6.25
2.6.24: Apr 28 2006:
   - Portability fixes: configure on Windows, testapi compile on windows
      (Kasimier Buchcik, venkat naidu), Borland C++ 6 compile (Eric Zurcher),
      HP-UX compiler workaround (Rick Jones), xml2-config bugfix, gcc-4.1
      cleanups, Python detection scheme (Joseph Sacco), UTF-8 file paths on
      Windows (Roland Schwingel).
      
   - Improvements: xmlDOMWrapReconcileNamespaces xmlDOMWrapCloneNode (Kasimier
      Buchcik), XML catalog debugging (Rick Jones), update to Unicode 4.01.
   - Bug fixes: xmlParseChunk() problem in 2.6.23, xmlParseInNodeContext()
      on HTML docs, URI behaviour on Windows (Rob Richards), comment streaming
      bug, xmlParseComment (with William Brack), regexp bug fixes (DV &
      Youri Golovanov), xmlGetNodePath on text/CDATA (Kasimier),
      one Relax-NG interleave bug, xmllint --path and --valid,
      XSD bugfixes (Kasimier), remove debug
      left in Python bindings (Nic Ferrier), xmlCatalogAdd bug (Martin Cole),
      xmlSetProp fixes (Rob Richards), HTML IDness (Rob Richards), a large
      number of cleanups and small fixes based on Coverity reports, bug
      in character ranges, Unicode tables const (Aivars Kalvans), schemas
      fix (Stefan Kost), xmlRelaxNGParse error deallocation, 
      xmlSchemaAddSchemaDoc error deallocation, error handling on unallowed
      code point, ixmllint --nonet to never reach the net (Gary Coady),
      line break in writer after end PI (Jason Viers). 
   - Documentation: man pages updates and cleanups (Daniel Leidert).
   - New features: Relax NG structure error handlers.


2.6.23: Jan 5 2006:
   - portability fixes: Windows (Rob Richards), getaddrinfo on Windows
    (Kolja Nowak, Rob Richards), icc warnings (Kjartan Maraas),
    --with-minimum compilation fixes (William Brack), error case handling fix
    on Solaris (Albert Chin), don't use 'list' as parameter name reported by
    Samuel Diaz Garcia, more old Unices portability fixes (Albert Chin),
    MinGW compilation (Mark Junker), HP-UX compiler warnings (Rick
  Jones),
   - code cleanup: xmlReportError (Adrian Mouat), remove xmlBufferClose
    (Geert Jansen), unreachable code (Oleksandr Kononenko), refactoring
    parsing code (Bjorn Reese)
   - bug fixes: xmlBuildRelativeURI and empty path (William Brack),
    combinatory explosion and performances in regexp code, leak in
    xmlTextReaderReadString(), xmlStringLenDecodeEntities problem (Massimo
    Morara), Identity Constraints bugs and a segfault (Kasimier Buchcik),
    XPath pattern based evaluation bugs (DV & Kasimier),
    xmlSchemaContentModelDump() memory leak (Kasimier), potential leak in
    xmlSchemaCheckCSelectorXPath(), xmlTextWriterVSprintf() misuse of
    vsnprintf (William Brack), XHTML serialization fix (Rob Richards), CRLF
    split problem (William), issues with non-namespaced attributes in
    xmlAddChild() xmlAddNextSibling() and xmlAddPrevSibling() (Rob Richards),
    HTML parsing of script, Python must not output to stdout (Nic Ferrier),
    exclusive C14N namespace visibility (Aleksey Sanin), XSD dataype
    totalDigits bug (Kasimier Buchcik), error handling when writing to an
    xmlBuffer (Rob Richards), runtest schemas error not reported (Hisashi
    Fujinaka), signed/unsigned problem in date/time code (Albert Chin), fix
    XSI driven XSD validation (Kasimier), parsing of xs:decimal (Kasimier),
    fix DTD writer output (Rob Richards), leak in xmlTextReaderReadInnerXml
    (Gary Coady), regexp bug affecting schemas (Kasimier), configuration of
    runtime debugging (Kasimier), xmlNodeBufGetContent bug on entity refs
    (Oleksandr Kononenko), xmlRegExecPushString2 bug (Sreeni Nair),
    compilation and build fixes (Michael Day), removed dependancies on
    xmlSchemaValidError (Kasimier), bug with <xml:foo/>, more XPath
    pattern based evaluation fixes (Kasimier)
   - improvements: XSD Schemas redefinitions/restrictions (Kasimier
    Buchcik), node copy checks and fix for attribute (Rob Richards), counted
    transition bug in regexps, ctxt->standalone = -2 to indicate no
    standalone attribute was found, add xmlSchemaSetParserStructuredErrors()
    (Kasimier Buchcik), add xmlTextReaderSchemaValidateCtxt() to API
    (Kasimier), handle gzipped HTTP resources (Gary Coady), add
    htmlDocDumpMemoryFormat. (Rob Richards),
   - documentation: typo (Michael Day), libxml man page (Albert Chin), save
    function to XML buffer (Geert Jansen), small doc fix (Aron Stansvik),


2.6.22: Sep 12 2005:
   - build fixes: compile without schematron (StÃ©phane Bidoul)
   - bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i,
    CDATA push parser bug, xmlElemDump problem with XHTML1 doc,
    XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some
    output formatting for meta element (Rob Richards), script and style
    XHTML1 serialization (David Madore), Attribute derivation fixups in XSD
    (Kasimier Buchcik), better IDC error reports (Kasimier Buchcik)
   - improvements: add XML_SAVE_NO_EMPTY xmlSaveOption (Rob Richards), add
    XML_SAVE_NO_XHTML xmlSaveOption, XML Schemas improvements preparing for
    derive (Kasimier Buchcik).
   - documentation: generation of gtk-doc like docs, integration with
    devhelp.


2.6.21: Sep 4 2005:
   - build fixes: Cygwin portability fixes (Gerrit P. Haase), calling
    convention problems on Windows (Marcus Boerger), cleanups based on Linus'
    sparse tool, update of win32/configure.js (Rob Richards), remove warnings
    on Windows(Marcus Boerger), compilation without SAX1, detection of the
    Python binary, use $GCC inestad of $CC = 'gcc' (Andrew W. Nosenko),
    compilation/link with threads and old gcc, compile problem by C370 on
    Z/OS,
   - bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8
    bug (Jiri Netolicky), XPath NaN compare bug (William Brack),
    htmlParseScript potential bug, Schemas regexp handling of spaces, Base64
    Schemas comparisons NIST passes, automata build error xsd:all,
    xmlGetNodePath for namespaced attributes (Alexander Pohoyda), xmlSchemas
    foreign namespaces handling, XML Schemas facet comparison (Kupriyanov
    Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier Buchcik), xml:
    namespace ahndling in Schemas (Kasimier), empty model group in Schemas
    (Kasimier), wilcard in Schemas (Kasimier), URI composition (William),
    xs:anyType in Schemas (Kasimier), Python resolver emmitting error
    messages directly, Python xmlAttr.parent (Jakub Piotr Clapa), trying to
    fix the file path/URI conversion, xmlTextReaderGetAttribute fix (Rob
    Richards), xmlSchemaFreeAnnot memleak (Kasimier), HTML UTF-8
    serialization, streaming XPath, Schemas determinism detection problem,
    XInclude bug, Schemas context type (Dean Hill), validation fix (Derek
    Poon), xmlTextReaderGetAttribute[Ns] namespaces (Rob Richards), Schemas
    type fix (Kuba Nowakowski), UTF-8 parser bug, error in encoding handling,
    xmlGetLineNo fixes, bug on entities handling, entity name extraction in
    error handling with XInclude, text nodes in HTML body tags (Gary Coady),
    xml:id and IDness at the treee level fixes, XPath streaming patterns
  bugs.
   - improvements: structured interfaces for schemas and RNG error reports
    (Marcus Boerger), optimization of the char data inner loop parsing
    (thanks to Behdad Esfahbod for the idea), schematron validation though
    not finished yet, xmlSaveOption to omit XML declaration, keyref match
    error reports (Kasimier), formal expression handling code not plugged
    yet, more lax mode for the HTML parser, parser XML_PARSE_COMPACT option
    for text nodes allocation.
   - documentation: xmllint man page had --nonet duplicated


2.6.20: Jul 10 2005:
   - build fixes: Windows build (Rob Richards), Mingw compilation (Igor
    Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and
    andriy@google.com), use gcc weak references to pthread to avoid the
    pthread dependancy on Linux, compilation problem (Steve Nairn), compiling
    of subset (Morten Welinder), IPv6/ss_family compilation (William Brack),
    compilation when disabling parts of the library, standalone test
    distribution.
   - bug fixes: bug in lang(), memory cleanup on errors (William Brack),
    HTTP query strings (Aron Stansvik), memory leak in DTD (William), integer
    overflow in XPath (William), nanoftp buffer size, pattern "." apth fixup
    (Kasimier), leak in tree reported by Malcolm Rowe, replaceNode patch
    (Brent Hendricks), CDATA with NULL content (Mark Vakoc), xml:base fixup
    on XInclude (William), pattern fixes (William), attribute bug in
    exclusive c14n (Aleksey Sanin), xml:space and xml:lang with SAX2 (Rob
    Richards), namespace trouble in complex parsing (Malcolm Rowe), XSD type
    QNames fixes (Kasimier), XPath streaming fixups (William), RelaxNG bug
    (Rob Richards), Schemas for Schemas fixes (Kasimier), removal of ID (Rob
    Richards), a small RelaxNG leak, HTML parsing in push mode bug (James
    Bursa), failure to detect UTF-8 parsing bugs in CDATA sections,
    areBlanks() heuristic failure, duplicate attributes in DTD bug
  (William).
   - improvements: lot of work on Schemas by Kasimier Buchcik both on
    conformance and streaming, Schemas validation messages (Kasimier Buchcik,
    Matthew Burgess), namespace removal at the python level (Brent
    Hendricks), Update to new Schemas regression tests from W3C/Nist
    (Kasimier), xmlSchemaValidateFile() (Kasimier), implementation of
    xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml (James Wert),
    standalone test framework and programs, new DOM import APIs
    xmlDOMWrapReconcileNamespaces() xmlDOMWrapAdoptNode() and
    xmlDOMWrapRemoveNode(), extension of xmllint capabilities for SAX and
    Schemas regression tests, xmlStopParser() available in pull mode too,
    ienhancement to xmllint --shell namespaces support, Windows port of the
    standalone testing tools (Kasimier and William),
    xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug() SAX
    Schemas APIs, Schemas xmlReader support.


2.6.19: Apr 02 2005:
   - build fixes: drop .la from RPMs, --with-minimum build fix (William
    Brack), use XML_SOCKLEN_T instead of SOCKLEN_T because it breaks with AIX
    5.3 compiler, fixed elfgcchack.h generation and PLT reduction code on
    Linux/ELF/gcc4
   - bug fixes: schemas type decimal fixups (William Brack), xmmlint return
    code (Gerry Murphy), small schemas fixes (Matthew Burgess and GUY
    Fabrice), workaround "DAV:" namespace brokeness in c14n (Aleksey Sanin),
    segfault in Schemas (Kasimier Buchcik), Schemas attribute validation
    (Kasimier), Prop related functions and xmlNewNodeEatName (Rob Richards),
    HTML serialization of name attribute on a elements, Python error handlers
    leaks and improvement (Brent Hendricks), uninitialized variable in
    encoding code, Relax-NG validation bug, potential crash if
    gnorableWhitespace is NULL, xmlSAXParseDoc and xmlParseDoc signatures,
    switched back to assuming UTF-8 in case no encoding is given at
    serialization time
   - improvements: lot of work on Schemas by Kasimier Buchcik on facets
    checking and also mixed handling.
   - 


2.6.18: Mar 13 2005:
   - build fixes: warnings (Peter Breitenlohner), testapi.c generation,
    Bakefile support (Francesco Montorsi), Windows compilation (Joel Reed),
    some gcc4 fixes, HP-UX portability fixes (Rick Jones).
   - bug fixes: xmlSchemaElementDump namespace (Kasimier Buchcik), push and
    xmlreader stopping on non-fatal errors, thread support for dictionnaries
    reference counting (Gary Coady), internal subset and push problem, URL
    saved in xmlCopyDoc, various schemas bug fixes (Kasimier), Python paths
    fixup (Stephane Bidoul), xmlGetNodePath and namespaces, xmlSetNsProp fix
    (Mike Hommey), warning should not count as error (William Brack),
    xmlCreatePushParser empty chunk, XInclude parser flags (William), cleanup
    FTP and HTTP code to reuse the uri parsing and IPv6 (William),
    xmlTextWriterStartAttributeNS fix (Rob Richards), XMLLINT_INDENT being
    empty (William), xmlWriter bugs (Rob Richards), multithreading on Windows
    (Rich Salz), xmlSearchNsByHref fix (Kasimier), Python binding leak (Brent
    Hendricks), aliasing bug exposed by gcc4 on s390, xmlTextReaderNext bug
    (Rob Richards), Schemas decimal type fixes (William Brack),
    xmlByteConsumed static buffer (Ben Maurer).
   - improvement: speedup parsing comments and DTDs, dictionnary support for
    hash tables, Schemas Identity constraints (Kasimier), streaming XPath
    subset, xmlTextReaderReadString added (Bjorn Reese), Schemas canonical
    values handling (Kasimier), add xmlTextReaderByteConsumed (Aron
  Stansvik),
   - Documentation: Wiki support (Joel Reed)


2.6.17: Jan 16 2005:
   - build fixes: Windows, warnings removal (William Brack),
    maintainer-clean dependency(William), build in a different directory
    (William), fixing --with-minimum configure build (William), BeOS build
    (Marcin Konicki), Python-2.4 detection (William), compilation on AIX (Dan
    McNichol)
   - bug fixes: xmlTextReaderHasAttributes (Rob Richards), xmlCtxtReadFile()
    to use the catalog(s), loop on output (William Brack), XPath memory leak,
    ID deallocation problem (Steve Shepard), debugDumpNode crash (William),
    warning not using error callback (William), xmlStopParser bug (William),
    UTF-16 with BOM on DTDs (William), namespace bug on empty elements in
    push mode (Rob Richards), line and col computations fixups (Aleksey
    Sanin), xmlURIEscape fix (William), xmlXPathErr on bad range (William),
    patterns with too many steps, bug in RNG choice optimization, line number
    sometimes missing.
   - improvements: XSD Schemas (Kasimier Buchcik), python generator
    (William), xmlUTF8Strpos speedup (William), unicode Python strings
    (William), XSD error reports (Kasimier Buchcik), Python __str__ call
    serialize().
   - new APIs: added xmlDictExists(), GetLineNumber and GetColumnNumber for
    the xmlReader (Aleksey Sanin), Dynamic Shared Libraries APIs (mostly Joel
    Reed), error extraction API from regexps, new XMLSave option for format
    (Phil Shafer)
   - documentation: site improvement (John Fleck), FAQ entries
  (William).


2.6.16: Nov 10 2004:
   - general hardening and bug fixing crossing all the API based on new
    automated regression testing
   - build fix: IPv6 build and test on AIX (Dodji Seketeli)
   - bug fixes: problem with XML::Libxml reported by Petr Pajas,  encoding
    conversion functions return values, UTF-8 bug affecting XPath reported by
    Markus Bertheau, catalog problem with NULL entries (William Brack)
   - documentation: fix to xmllint man page, some API function descritpion
    were updated.
   - improvements: DTD validation APIs provided at the Python level (Brent
    Hendricks)


2.6.15: Oct 27 2004:
   - security fixes on the nanoftp and nanohttp modules
   - build fixes: xmllint detection bug in configure, building outside the
    source tree (Thomas Fitzsimmons)
   - bug fixes: HTML parser on broken ASCII chars in names (William), Python
    paths (Malcolm Tredinnick), xmlHasNsProp and default namespace (William),
    saving to python file objects (Malcolm Tredinnick), DTD lookup fix
    (Malcolm), save back <group> in catalogs (William), tree build
    fixes (DV and Rob Richards), Schemas memory bug, structured error handler
    on Python 64bits, thread local memory deallocation, memory leak reported
    by Volker Roth, xmlValidateDtd in the presence of an internal subset,
    entities and _private problem (William), xmlBuildRelativeURI error
    (William).
   - improvements: better XInclude error reports (William), tree debugging
    module and tests, convenience functions at the Reader API (Graham
    Bennett), add support for PI in the HTML parser.


2.6.14: Sep 29 2004:
   - build fixes: configure paths for xmllint and xsltproc, compilation
    without HTML parser, compilation warning cleanups (William Brack &
    Malcolm Tredinnick), VMS makefile update (Craig Berry),
   - bug fixes: xmlGetUTF8Char (William Brack), QName properties (Kasimier
    Buchcik), XInclude testing, Notation serialization, UTF8ToISO8859x
    transcoding (Mark Itzcovitz), lots of XML Schemas cleanup and fixes
    (Kasimier), ChangeLog cleanup (Stepan Kasal), memory fixes (Mark Vakoc),
    handling of failed realloc(), out of bound array adressing in Schemas
    date handling, Python space/tabs cleanups (Malcolm Tredinnick), NMTOKENS
    E20 validation fix (Malcolm),
   - improvements: added W3C XML Schemas testsuite (Kasimier Buchcik), add
    xmlSchemaValidateOneElement (Kasimier), Python exception hierearchy
    (Malcolm Tredinnick), Python libxml2 driver improvement (Malcolm
    Tredinnick), Schemas support for xsi:schemaLocation,
    xsi:noNamespaceSchemaLocation, xsi:type (Kasimier Buchcik)


2.6.13: Aug 31 2004:
   - build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc,
    Solaris compiler warning, fixing RPM BuildRequires,
   - fixes: DTD loading on Windows (Igor), Schemas error reports APIs
    (Kasimier Buchcik), Schemas validation crash, xmlCheckUTF8 (William Brack
    and Julius Mittenzwei), Schemas facet check (Kasimier), default namespace
    problem (William), Schemas hexbinary empty values, encoding error could
    genrate a serialization loop.
   - Improvements: Schemas validity improvements (Kasimier), added --path
    and --load-trace options to xmllint
   - documentation: tutorial update (John Fleck)


2.6.12: Aug 22 2004:
   - build fixes: fix --with-minimum, elfgcchack.h fixes (Peter
    Breitenlohner), perl path lookup (William), diff on Solaris (Albert
    Chin), some 64bits cleanups.
   - Python: avoid a warning with 2.3 (William Brack), tab and space mixes
    (William), wrapper generator fixes (William), Cygwin support (Gerrit P.
    Haase), node wrapper fix (Marc-Antoine Parent), XML Schemas support
    (Torkel Lyng)
   - Schemas: a lot of bug fixes and improvements from Kasimier Buchcik
   - fixes: RVT fixes (William), XPath context resets bug (William), memory
    debug (Steve Hay), catalog white space handling (Peter Breitenlohner),
    xmlReader state after attribute reading (William), structured error
    handler (William), XInclude generated xml:base fixup (William), Windows
    memory reallocation problem (Steve Hay), Out of Memory conditions
    handling (William and Olivier Andrieu), htmlNewDoc() charset bug,
    htmlReadMemory init (William), a posteriori validation DTD base
    (William), notations serialization missing, xmlGetNodePath (Dodji),
    xmlCheckUTF8 (Diego Tartara), missing line numbers on entity
  (William)
   - improvements: DocBook catalog build scrip (William), xmlcatalog tool
    (Albert Chin), xmllint --c14n option, no_proxy environment (Mike Hommey),
    xmlParseInNodeContext() addition, extend xmllint --shell, allow XInclude
    to not generate start/end nodes, extend xmllint --version to include CVS
    tag (William)
   - documentation: web pages fixes, validity API docs fixes (William)
    schemas API fix (Eric Haszlakiewicz), xmllint man page (John Fleck)


2.6.11: July 5 2004:
   - Schemas: a lot of changes and improvements by Kasimier Buchcik for
    attributes, namespaces and simple types.
   - build fixes: --with-minimum (William Brack),  some gcc cleanup
    (William), --with-thread-alloc (William)
   - portability: Windows binary package change (Igor Zlatkovic), Catalog
    path on Windows
   - documentation: update to the tutorial (John Fleck), xmllint return code
    (John Fleck), man pages (Ville Skytta),
   - bug fixes: C14N bug serializing namespaces (Aleksey Sanin), testSAX
    properly initialize the library (William), empty node set in XPath
    (William), xmlSchemas errors (William), invalid charref problem pointed
    by Morus Walter, XInclude xml:base generation (William), Relax-NG bug
    with div processing (William), XPointer and xml:base problem(William),
    Reader and entities, xmllint return code for schemas (William), reader
    streaming problem (Steve Ball), DTD serialization problem (William),
    libxml.m4 fixes (Mike Hommey), do not provide destructors as methods on
    Python classes, xmlReader buffer bug, Python bindings memory interfaces
    improvement (with StÃ©phane Bidoul), Fixed the push parser to be back to
    synchronous behaviour.
   - improvement: custom per-thread I/O enhancement (Rob Richards), register
    namespace in debug shell (Stefano Debenedetti), Python based regression
    test for non-Unix users (William), dynamically increase the number of
    XPath extension functions in Python and fix a memory leak (Marc-Antoine
    Parent and William)
   - performance: hack done with Arjan van de Ven to reduce ELF footprint
    and generated code on Linux, plus use gcc runtime profiling to optimize
    the code generated in the RPM packages.


2.6.10: May 17 2004:
   - Web page generated for ChangeLog
   - build fixes: --without-html problems, make check without make all
   - portability: problem with xpath.c on Windows (MSC and Borland), memcmp
    vs. strncmp on Solaris, XPath tests on Windows (Mark Vakoc), C++ do not
    use "list" as parameter name, make tests work with Python 1.5 (Ed
  Davis),
   - improvements: made xmlTextReaderMode public, small buffers resizing
    (Morten Welinder), add --maxmem option to xmllint, add
    xmlPopInputCallback() for Matt Sergeant, refactoring of serialization
    escaping, added escaping customization
   - bugfixes: xsd:extension (Taihei Goi), assorted regexp bugs (William
    Brack), xmlReader end of stream problem, node deregistration with reader,
    URI escaping and filemanes,  XHTML1 formatting (Nick Wellnhofer), regexp
    transition reduction (William), various XSD Schemas fixes (Kasimier
    Buchcik), XInclude fallback problem (William), weird problems with DTD
    (William), structured error handler callback context (William), reverse
    xmlEncodeSpecialChars() behaviour back to escaping '"'


2.6.9: Apr 18 2004:
   - implement xml:id Working Draft, relaxed XPath id() checking
   - bugfixes: xmlCtxtReset (Brent Hendricks), line number and CDATA (Dave
    Beckett), Relax-NG compilation (William Brack), Regexp patches (with
    William), xmlUriEscape (Mark Vakoc), a Relax-NG notAllowed problem (with
    William), Relax-NG name classes compares (William), XInclude duplicate
    fallback (William), external DTD encoding detection (William), a DTD
    validation bug (William), xmlReader Close() fix, recusive extention
    schemas
   - improvements: use xmlRead* APIs in test tools (Mark Vakoc), indenting
    save optimization, better handle IIS broken HTTP redirect  behaviour (Ian
    Hummel), HTML parser frameset (James Bursa), libxml2-python RPM
    dependancy, XML Schemas union support (Kasimier Buchcik), warning removal
    clanup (William), keep ChangeLog compressed when installing from RPMs
   - documentation: examples and xmlDocDumpMemory docs (John Fleck), new
    example (load, xpath, modify, save), xmlCatalogDump() comments,
   - Windows: Borland C++ builder (Eric Zurcher), work around Microsoft
    compiler NaN handling bug (Mark Vakoc)


2.6.8: Mar 23 2004:
   - First step of the cleanup of the serialization code and APIs
   - XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
    Dickmeiss), anyURI for "" (John Belmonte)
   - Python: Canonicalization C14N support added (Anthony Carrico)
   - xmlDocCopyNode() extension (William)
   - Relax-NG: fix when processing XInclude results (William), external
    reference in interleave (William), missing error on <choice>
    failure (William), memory leak in schemas datatype facets.
   - xmlWriter: patch for better DTD support (Alfred Mickautsch)
   - bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
    Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
    URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
    XInclude and XPointer fixes for entities (William), XML parser bug
    reported by Holger Rauch, nanohttp fd leak (William),  regexps char
    groups '-' handling (William), dictionnary reference counting problems,
    do not close stderr.
   - performance patches from Petr Pajas
   - Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)
   - compilation and portability fixes: --without-valid, catalog cleanups
    (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
    to Windows (Christophe de Vienne),  --with-html-dir fixup (Julio Merino
    Vidal), Windows build (Eric Zurcher)


2.6.7: Feb 23 2004:
   - documentation: tutorial updates (John Fleck), benchmark results
   - xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)
   - XPath optimization (Petr Pajas)
   - DTD ID handling optimization
   - bugfixes: xpath number with  > 19 fractional (William Brack), push
    mode with unescaped '>' characters, fix xmllint --stream --timing, fix
    xmllint --memory --stream memory usage, xmlAttrSerializeTxtContent
    handling NULL, trying to fix Relax-NG/Perl interface.
   - python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)
   - Added relaxng option to xmllint --shell


2.6.6: Feb 12 2004:
   - nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
    William) reported by Yuuichi Teranishi
   - bugfixes: make test and path issues, xmlWriter attribute serialization
    (William Brack), xmlWriter indentation (William), schemas validation
    (Eric Haszlakiewicz), XInclude dictionnaries issues (William and Oleg
    Paraschenko), XInclude empty fallback (William), HTML warnings (William),
    XPointer in XInclude (William), Python namespace serialization,
    isolat1ToUTF8 bound error (Alfred Mickautsch), output of parameter
    entities in internal subset (William), internal subset bug in push mode,
    <xs:all> fix (Alexey Sarytchev)
   - Build: fix for automake-1.8 (Alexander Winston), warnings removal
    (Philip Ludlam), SOCKLEN_T detection fixes (Daniel Richard), fix
    --with-minimum configuration.
   - XInclude: allow the 2001 namespace without warning.
   - Documentation: missing example/index.html (John Fleck), version
    dependancies (John Fleck)
   - reader API: structured error reporting (Steve Ball)
   - Windows compilation: mingw, msys (Mikhail Grushinskiy), function
    prototype (Cameron Johnson), MSVC6 compiler warnings, _WINSOCKAPI_
  patch
   - Parsers: added xmlByteConsumed(ctxt) API to get the byte offest in
    input.


2.6.5: Jan 25 2004:
   - Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
    (William), xs:all problem (William), a number of XPointer bugfixes
    (William), xmllint error go to stderr, DTD validation problem with
    namespace, memory leak (William), SAX1 cleanup and minimal options fixes
    (Mark Vadoc), parser context reset on error (Shaun McCance), XPath union
    evaluation problem (William) , xmlReallocLoc with NULL (Aleksey Sanin),
    XML Schemas double free (Steve Ball), XInclude with no href, argument
    callbacks order for XPath callbacks (Frederic Peters)
   - Documentation: python scripts (William Brack), xslt stylesheets (John
    Fleck), doc (Sven Zimmerman), I/O example.
   - Python bindings: fixes (William), enum support (StÃ©phane Bidoul),
    structured error reporting (StÃ©phane Bidoul)
   - XInclude: various fixes for conformance, problem related to dictionnary
    references (William & me), recursion (William)
   - xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
    Mickautsch),
   - xmlSchemas: normalizedString datatype (John Belmonte)
   - code cleanup for strings functions (William)
   - Windows: compiler patches (Mark Vakoc)
   - Parser optimizations, a few new XPath and dictionnary APIs for future
    XSLT optimizations.


2.6.4: Dec 24 2003:
   - Windows build fixes (Igor Zlatkovic)
   - Some serious XInclude problems reported by Oleg Paraschenko and
   - Unix and Makefile packaging fixes (me, William Brack,
   - Documentation improvements (John Fleck, William Brack), example fix
    (Lucas Brasilino)
   - bugfixes: xmlTextReaderExpand() with xmlReaderWalker, XPath handling of
    NULL strings (William Brack) , API building reader or parser from
    filedescriptor should not close it, changed XPath sorting to be stable
    again (William Brack), xmlGetNodePath() generating '(null)' (William
    Brack), DTD validation and namespace bug (William Brack), XML Schemas
    double inclusion behaviour


2.6.3: Dec 10 2003:
   - documentation updates and cleanup (DV, William Brack, John Fleck)
   - added a repository of examples, examples from Aleksey Sanin, Dodji
    Seketeli, Alfred Mickautsch
   - Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
    (Kenneth Haley)
   - Unicode range checking (William Brack)
   - code cleanup (William Brack)
   - Python bindings: doc (John Fleck),  bug fixes
   - UTF-16 cleanup and BOM issues (William Brack)
   - bug fixes: ID and xmlReader validation, XPath (William Brack),
    xmlWriter (Alfred Mickautsch), hash.h inclusion problem, HTML parser
    (James Bursa), attribute defaulting and validation, some serialization
    cleanups, XML_GET_LINE macro, memory debug when using threads (William
    Brack), serialization of attributes and entities content, xmlWriter
    (Daniel Schulman)
   - XInclude bugfix, new APIs and update to the last version including the
    namespace change.
   - XML Schemas improvements: include (Robert Stepanek), import and
    namespace handling, fixed the regression tests troubles, added examples
    based on Eric van der Vlist book, regexp fixes
   - preliminary pattern support for streaming (needed for schemas
    constraints), added xmlTextReaderPreservePattern() to collect subdocument
    when streaming.
   - various fixes in the structured error handling


2.6.2: Nov 4 2003:
   - XPath context unregistration fixes
   - text node coalescing fixes (Mark Lilback)
   - API to screate a W3C Schemas from an existing document (Steve Ball)
   - BeOS patches (Marcin 'Shard' Konicki)
   - xmlStrVPrintf function added (Aleksey Sanin)
   - compilation fixes (Mark Vakoc)
   - stdin parsing fix (William Brack)
   - a posteriori DTD validation fixes
   - xmlReader bug fixes: Walker fixes, python bindings
   - fixed xmlStopParser() to really stop the parser and errors
   - always generate line numbers when using the new xmlReadxxx
  functions
   - added XInclude support to the xmlReader interface
   - implemented XML_PARSE_NONET parser option
   - DocBook XSLT processing bug fixed
   - HTML serialization for <p> elements (William Brack and me)
   - XPointer failure in XInclude are now handled as resource errors
   - fixed xmllint --html to use the HTML serializer on output (added
    --xmlout to implement the previous behaviour of saving it using the XML
    serializer)


2.6.1: Oct 28 2003:
   - Mostly bugfixes after the big 2.6.0 changes
   - Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
    (William Brack)
   - Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
    Zlatkovic)
   - xmlWriter bugfix (Alfred Mickautsch)
   - chvalid.[ch]: couple of fixes from Stephane Bidoul
   - context reset: error state reset, push parser reset (Graham
  Bennett)
   - context reuse: generate errors if file is not readable
   - defaulted attributes for element coming from internal entities
    (Stephane Bidoul)
   - Python: tab and spaces mix (William Brack)
   - Error handler could crash in DTD validation in 2.6.0
   - xmlReader: do not use the document or element _private field
   - testSAX.c: avoid a problem with some PIs (Massimo Morara)
   - general bug fixes: mandatory encoding in text decl, serializing
    Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
    XPath errors not reported,  slow HTML parsing of large documents.


2.6.0: Oct 20 2003:
   - Major revision release: should be API and ABI compatible but got a lot
    of change
   - Increased the library modularity, far more options can be stripped out,
    a --with-minimum configuration will weight around 160KBytes
   - Use per parser and per document dictionnary, allocate names and small
    text nodes from the dictionnary
   - Switch to a SAX2 like parser rewrote most of the XML parser core,
    provides namespace resolution and defaulted attributes, minimize memory
    allocations and copies, namespace checking and specific error handling,
    immutable buffers, make predefined entities static structures, etc...
   - rewrote all the error handling in the library, all errors can be
    intercepted at a structured level, with precise information
  available.
   - New simpler and more generic XML and HTML parser APIs, allowing to
    easilly modify the parsing options and reuse parser context for multiple
    consecutive documents.
   - Similar new APIs for the xmlReader, for options and reuse, provided new
    functions to access content as const strings, use them for Python
  bindings
   - a  lot of other smaller API improvements: xmlStrPrintf (Aleksey Sanin),
    Walker i.e. reader on a document tree based on Alfred Mickautsch code,
    make room in nodes for line numbers, reference counting and future PSVI
    extensions, generation of character ranges to be checked with faster
    algorithm (William),  xmlParserMaxDepth (Crutcher Dunnavant), buffer
    access
   - New xmlWriter API provided by Alfred Mickautsch
   - Schemas: base64 support by Anthony Carrico
   - Parser<->HTTP integration fix, proper processing of the Mime-Type
    and charset information if available.
   - Relax-NG: bug fixes including the one reported by Martijn Faassen and
    zeroOrMore, better error reporting.
   - Python bindings (StÃ©phane Bidoul), never use stdout for errors
  output
   - Portability: all the headers have macros for export and calling
    convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
    Windows: threads (Jesse Pelton), Borland compiler (Eric Zurcher,  Igor),
    Mingw (Igor), typos (Mark Vakoc),  beta version (Stephane Bidoul),
    warning cleanups on AIX and MIPS compilers (William Brack), BeOS (Marcin
    'Shard' Konicki)
   - Documentation fixes and README (William Brack), search fix (William),
    tutorial updates (John Fleck), namespace docs (Stefan Kost)
   - Bug fixes: xmlCleanupParser (Dave Beckett), threading uninitialized
    mutexes, HTML doctype lowercase,  SAX/IO (William), compression detection
    and restore (William), attribute declaration in DTDs (William), namespace
    on attribute in HTML output (William), input filename (Rob Richards),
    namespace DTD validation, xmlReplaceNode (Chris Ryland), I/O callbacks
    (Markus Keim), CDATA serialization (Shaun McCance), xmlReader (Peter
    Derr), high codepoint charref like &#x10FFFF;, buffer access in push
    mode (Justin Fletcher), TLS threads on Windows (Jesse Pelton), XPath bug
    (William), xmlCleanupParser (Marc Liyanage), CDATA output (William), HTTP
    error handling.
   - xmllint options: --dtdvalidfpi for Tobias Reif, --sax1 for compat
    testing,  --nodict for building without tree dictionnary, --nocdata to
    replace CDATA by text, --nsclean to remove surperfluous  namespace
    declarations
   - added xml2-config --libtool-libs option from Kevin P. Fleming
   - a lot of profiling and tuning of the code, speedup patch for
    xmlSearchNs() by Luca Padovani. The xmlReader should do far less
    allocation and it speed should get closer to SAX. Chris Anderson worked
    on speeding and cleaning up repetitive checking code.
   - cleanup of "make tests"
   - libxml-2.0-uninstalled.pc from Malcolm Tredinnick
   - deactivated the broken docBook SGML parser code and plugged the XML
    parser instead.


2.5.11: Sep 9 2003:
A bugfix only release:   - risk of crash in Relax-NG
   - risk of crash when using multithreaded programs


2.5.10: Aug 15 2003:
A bugfixes only release   - Windows Makefiles (William Brack)
   - UTF-16 support fixes (Mark Itzcovitz)
   - Makefile and portability (William Brack) automake, Linux alpha, Mingw
    on Windows (Mikhail Grushinskiy)
   - HTML parser (Oliver Stoeneberg)
   - XInclude performance problem reported by Kevin Ruscoe
   - XML parser performance problem reported by Grant Goodale
   - xmlSAXParseDTD() bug fix from Malcolm Tredinnick
   - and a couple other cleanup


2.5.9: Aug 9 2003:
   - bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
    (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
    (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
    xmlReader, Relax-NG schemas compilation, namespace handling,  EXSLT (Sean
    Griffin), HTML parsing problem (William Brack), DTD validation for mixed
    content + namespaces, HTML serialization, library initialization,
    progressive HTML parser
   - better interfaces for Relax-NG error handling (Joachim Bauch, )
   - adding xmlXIncludeProcessTree() for XInclud'ing in a subtree
   - doc fixes and improvements (John Fleck)
   - configure flag for -with-fexceptions when embedding in C++
   - couple of new UTF-8 helper functions (William Brack)
   - general encoding cleanup + ISO-8859-x without iconv (Peter Jacobi)
   - xmlTextReader cleanup + enum for node types (Bjorn Reese)
   - general compilation/warning cleanup Solaris/HP-UX/... (William
  Brack)


2.5.8: Jul 6 2003:
   - bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
    Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
    PI related memleak, compilation without schemas or without xpath (Joerg
    Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
    rpm problem on , i86_64, removed a few compilation problems from 2.5.7,
    xmlIOParseDTD, and xmlSAXParseDTD (Malcolm Tredinnick)
   - portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)
   - William Brack fixed multithreading lock problems
   - IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)
   - Windows fixes (Igor Zlatkovic,  Eric Zurcher), threading (StÃ©phane
    Bidoul)
   - A few W3C Schemas Structure improvements
   - W3C Schemas Datatype improvements (Charlie Bozeman)
   - Python bindings for thread globals (StÃ©phane Bidoul), and method/class
    generator
   - added --nonet option to xmllint
   - documentation improvements (John Fleck)


2.5.7: Apr 25 2003:
   - Relax-NG: Compiling to regexp and streaming validation on top of the
    xmlReader interface, added to xmllint --stream
   - xmlReader: Expand(), Next() and DOM access glue, bug fixes
   - Support for large files: RGN validated a 4.5GB instance
   - Thread support is now configured in by default
   - Fixes: update of the Trio code (Bjorn), WXS Date and Duration fixes
    (Charles Bozeman), DTD and namespaces (Brent Hendricks), HTML push parser
    and zero bytes handling, some missing Windows file path conversions,
    behaviour of the parser and validator in the presence of "out of memory"
    error conditions
   - extended the API to be able to plug a garbage collecting memory
    allocator, added xmlMallocAtomic() and modified the allocations
    accordingly.
   - Performances: removed excessive malloc() calls, speedup of the push and
    xmlReader interfaces, removed excessive thread locking
   - Documentation: man page (John Fleck), xmlReader documentation
   - Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)


2.5.6: Apr 1 2003:
   - Fixed W3C XML Schemas datatype, should be compliant now except for
    binHex and base64 which are not supported yet.
   - bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
    XInclude entities handling, encoding detection on external subsets, XML
    Schemas bugs and memory leaks, HTML parser (James Bursa)
   - portability: python/trio (Albert Chin), Sun compiler warnings
   - documentation: added --relaxng option to xmllint man page (John)
   - improved error reporting: xml:space, start/end tag mismatches, Relax NG
    errors


2.5.5: Mar 24 2003:
   - Lot of fixes on the Relax NG implementation. More testing including
    DocBook and TEI examples.
   - Increased the support for W3C XML Schemas datatype
   - Several bug fixes in the URI handling layer
   - Bug fixes: HTML parser, xmlReader, DTD validation, XPath, encoding
    conversion, line counting in the parser.
   - Added support for $XMLLINT_INDENT environment variable, FTP delete
   - Fixed the RPM spec file name


2.5.4: Feb 20 2003:
   - Conformance testing and lot of fixes on Relax NG and XInclude
    implementation
   - Implementation of XPointer element() scheme
   - Bug fixes: XML parser, XInclude entities merge, validity checking on
    namespaces,
    2 serialization bugs, node info generation problems, a DTD regexp
    generation problem.
  
   - Portability: windows updates and path canonicalization (Igor)
   - A few typo fixes (Kjartan Maraas)
   - Python bindings generator fixes (Stephane Bidoul)


2.5.3: Feb 10 2003:
   - RelaxNG and XML Schemas datatypes improvements, and added a first
    version of RelaxNG Python bindings
   - Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
    serializing namespace nodes, encoding conversion bug, XHTML1
  serialization
   - Portability fixes: Windows (Igor), AMD 64bits RPM spec file


2.5.2: Feb 5 2003:
   - First implementation of RelaxNG, added --relaxng flag to xmllint
   - Schemas support now compiled in by default.
   - Bug fixes: DTD validation, namespace checking, XInclude and entities,
    delegateURI in XML Catalogs, HTML parser, XML reader (StÃ©phane Bidoul),
    XPath parser and evaluation,  UTF8ToUTF8 serialization, XML reader memory
    consumption, HTML parser, HTML serialization in the presence of
  namespaces
   - added an HTML API to check elements and attributes.
   - Documentation improvement, PDF for the tutorial (John Fleck), doc
    patches (Stefan Kost)
   - Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)
   - Added python bindings for XPointer, contextual error reporting
    (StÃ©phane Bidoul)
   - URI/file escaping problems (Stefano Zacchiroli)


2.5.1: Jan 8 2003:
   - Fixes a memory leak and configuration/compilation problems in 2.5.0
   - documentation updates (John)
   - a couple of XmlTextReader fixes


2.5.0: Jan 6 2003:
   - New XmltextReader interface based on C#
    API (with help of StÃ©phane Bidoul)
   - Windows: more exports, including the new API (Igor)
   - XInclude fallback fix
   - Python: bindings for the new API, packaging (StÃ©phane Bidoul),
    drv_libxml2.py Python xml.sax driver (StÃ©phane Bidoul), fixes, speedup
    and iterators for Python-2.2 (Hannu Krosing)
   - Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
  (John)
   - Fix an XML parser bug raised by Vyacheslav Pindyura
   - Fix for VMS serialization (Nigel Hall) and config (Craig A. Berry)
   - Entities handling fixes
   - new API to optionally track node creation and deletion (Lukas
  Schroeder)
   - Added documentation for the XmltextReader interface and some XML guidelines


2.4.30: Dec 12 2002:
   - 2.4.29 broke the python bindings, rereleasing
   - Improvement/fixes of the XML API generator, and couple of minor code
    fixes.


2.4.29: Dec 11 2002:
   - Windows fixes (Igor): Windows CE port, pthread linking, python bindings
    (StÃ©phane Bidoul), Mingw (Magnus Henoch), and export list updates
   - Fix for prev in python bindings (ERDI Gergo)
   - Fix for entities handling (Marcus Clarke)
   - Refactored the XML and HTML dumps to a single code path, fixed XHTML1
    dump
   - Fix for URI parsing when handling URNs with fragment identifiers
   - Fix for HTTP URL escaping problem
   - added an TextXmlReader (C#) like API (work in progress)
   - Rewrote the API in XML generation script, includes a C parser and saves
    more information needed for C# bindings


2.4.28: Nov 22 2002:
   - a couple of python binding fixes
   - 2 bug fixes in the XML push parser
   - potential memory leak removed (Martin Stoilov)
   - fix to the configure script for Unix (Dimitri Papadopoulos)
   - added encoding support for XInclude parse="text"
   - autodetection of XHTML1 and specific serialization rules added
   - nasty threading bug fixed (William Brack)


2.4.27: Nov 17 2002:
   - fixes for the Python bindings
   - a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
    HTML parser,  Schemas (Charles Bozeman), document fragment support
    (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
    xmlFreeNode(), xmlSAXParseMemory (Peter Jones), xmlGetNodePath (Petr
    Pajas), entities processing
   - added grep to xmllint --shell
   - VMS update patch from Craig A. Berry
   - cleanup of the Windows build with support for more compilers (Igor),
    better thread support on Windows
   - cleanup of Unix Makefiles and spec file
   - Improvements to the documentation (John Fleck)


2.4.26: Oct 18 2002:
   - Patches for Windows CE port, improvements on Windows paths handling
   - Fixes to the validation  code (DTD and Schemas), xmlNodeGetPath() ,
    HTML serialization, Namespace compliance,  and a number of small
  problems


2.4.25: Sep 26 2002:
   - A number of bug fixes: XPath, validation, Python bindings, DOM and
    tree, xmlI/O,  Html
   - Serious rewrite of XInclude
   - Made XML Schemas regexp part of the default build and APIs, small fix
    and improvement of the regexp core
   - Changed the validation code to reuse XML Schemas regexp APIs
   - Better handling of Windows file paths, improvement of Makefiles (Igor,
    Daniel Gehriger, Mark Vakoc)
   - Improved the python I/O bindings, the tests, added resolver and regexp
    APIs
   - New logos from Marc Liyanage
   - Tutorial improvements: John Fleck, Christopher Harris
   - Makefile: Fixes for AMD x86_64 (Mandrake), DESTDIR (Christophe
  Merlet)
   - removal of all stderr/perror use for error reporting
   - Better error reporting: XPath and DTD validation
   - update of the trio portability layer (Bjorn Reese)

2.4.24: Aug 22 2002   - XPath fixes (William), xf:escape-uri() (Wesley Terpstra)
   - Python binding fixes: makefiles (William), generator, rpm build, x86-64
    (fcrozat)
   - HTML <style> and boolean attributes serializer fixes
   - C14N improvements by Aleksey
   - doc cleanups: Rick Jones
   - Windows compiler makefile updates: Igor and Elizabeth Barham
   - XInclude: implementation of fallback and xml:base fixup added


2.4.23: July 6 2002:
   - performances patches: Peter Jacobi
   - c14n fixes, testsuite and performances: Aleksey Sanin
   - added xmlDocFormatDump: Chema Celorio
   - new tutorial: John Fleck
   - new hash functions and performances: Sander Vesik, portability fix from
    Peter Jacobi
   - a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
    HTML parsers, ID lookup function
   - removal of all remaining sprintf: Aleksey Sanin


2.4.22: May 27 2002:
   - a number of bug fixes: configure scripts, base handling, parser, memory
    usage, HTML parser, XPath, documentation (Christian Cornelssen),
    indentation, URI parsing
   - Optimizations for XMLSec, fixing and making public some of the network
    protocol handlers (Aleksey)
   - performance patch from Gary Pennington
   - Charles Bozeman provided date and time support for XML Schemas
  datatypes


2.4.21: Apr 29 2002:
This release is both a bug fix release and also contains the early XML
Schemas structures at 
http://www.w3.org/TR/xmlschema-1/
 and datatypes at 
http://www.w3.org/TR/xmlschema-2/
 code, beware, all
interfaces are likely to change, there is huge holes, it is clearly a work in
progress and don't even think of putting this code in a production system,
it's actually not compiled in by default. The real fixes are:
   - a couple of bugs or limitations introduced in 2.4.20
   - patches for Borland C++ and MSC by Igor
   - some fixes on XPath strings and conformance patches by Richard
  Jinks
   - patch from Aleksey for the ExcC14N specification
   - OSF/1 bug fix by Bjorn


2.4.20: Apr 15 2002:
   - bug fixes: file descriptor leak, XPath, HTML output, DTD validation
   - XPath conformance testing by Richard Jinks
   - Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
    libxml.m4


2.4.19: Mar 25 2002:
   - bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
    encoder
   - portability fixes in the HTTP code
   - memory allocation checks using valgrind, and profiling tests
   - revamp of the Windows build and Makefiles


2.4.18: Mar 18 2002:
   - bug fixes: tree, SAX, canonicalization, validation, portability,
  XPath
   - removed the --with-buffer option it was becoming unmaintainable
   - serious cleanup of the Python makefiles
   - speedup patch to XPath very effective for DocBook stylesheets
   - Fixes for Windows build, cleanup of the documentation


2.4.17: Mar 8 2002:
   - a lot of bug fixes, including "namespace nodes have no parents in
  XPath"
   - fixed/improved the Python wrappers, added more examples and more
    regression tests, XPath extension functions can now return node-sets
   - added the XML Canonicalization support from Aleksey Sanin


2.4.16: Feb 20 2002:
   - a lot of bug fixes, most of them were triggered by the XML Testsuite
    from OASIS and W3C. Compliance has been significantly improved.
   - a couple of portability fixes too.


2.4.15: Feb 11 2002:
   - Fixed the Makefiles, especially the python module ones
   - A few bug fixes and cleanup
   - Includes cleanup


2.4.14: Feb 8 2002:
   - Change of License to the MIT
    License basically for integration in XFree86 codebase, and removing
    confusion around the previous dual-licensing
   - added Python bindings, beta software but should already be quite
    complete
   - a large number of fixes and cleanups, especially for all tree
    manipulations
   - cleanup of the headers, generation of a reference API definition in
  XML


2.4.13: Jan 14 2002:
   - update of the documentation: John Fleck and Charlie Bozeman
   - cleanup of timing code from Justin Fletcher
   - fixes for Windows and initial thread support on Win32: Igor and Serguei
    Narojnyi
   - Cygwin patch from Robert Collins
   - added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg


2.4.12: Dec 7 2001:
   - a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
    XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
  (robert)
   - Eric Lavigne contributed project files for MacOS
   - some makefiles cleanups


2.4.11: Nov 26 2001:
   - fixed a couple of errors in the includes, fixed a few bugs, some code
    cleanups
   - xmllint man pages improvement by Heiko Rupp
   - updated VMS build instructions from John A Fotheringham
   - Windows Makefiles updates from Igor


2.4.10: Nov 10 2001:
   - URI escaping fix (Joel Young)
   - added xmlGetNodePath() (for paths or XPointers generation)
   - Fixes namespace handling problems when using DTD and validation
   - improvements on xmllint: Morus Walter patches for --format and
    --encode, Stefan Kost and Heiko Rupp improvements on the --shell
   - fixes for xmlcatalog linking pointed by Weiqi Gao
   - fixes to the HTML parser


2.4.9: Nov 6 2001:
   - fixes more catalog bugs
   - avoid a compilation problem, improve xmlGetLineNo()


2.4.8: Nov 4 2001:
   - fixed SGML catalogs broken in previous release, updated xmlcatalog
  tool
   - fixed a compile errors and some includes troubles.


2.4.7: Oct 30 2001:
   - exported some debugging interfaces
   - serious rewrite of the catalog code
   - integrated Gary Pennington thread safety patch, added configure option
    and regression tests
   - removed an HTML parser bug
   - fixed a couple of potentially serious validation bugs
   - integrated the SGML DocBook support in xmllint
   - changed the nanoftp anonymous login passwd
   - some I/O cleanup and a couple of interfaces for Perl wrapper
   - general bug fixes
   - updated xmllint man page by John Fleck
   - some VMS and Windows updates


2.4.6: Oct 10 2001:
   - added an updated man pages by John Fleck
   - portability and configure fixes
   - an infinite loop on the HTML parser was removed (William)
   - Windows makefile patches from Igor
   - fixed half a dozen bugs reported for libxml or libxslt
   - updated xmlcatalog to be able to modify SGML super catalogs


2.4.5: Sep 14 2001:
   - Remove a few annoying bugs in 2.4.4
   - forces the HTML serializer to output decimal charrefs since some
    version of Netscape can't handle hexadecimal ones


1.8.16: Sep 14 2001:
   - maintenance release of the old libxml1 branch, couple of bug and
    portability fixes


2.4.4: Sep 12 2001:
   - added --convert to xmlcatalog, bug fixes and cleanups of XML
  Catalog
   - a few bug fixes and some portability changes
   - some documentation cleanups


2.4.3:  Aug 23 2001:
   - XML Catalog support see the doc
   - New NaN/Infinity floating point code
   - A few bug fixes


2.4.2:  Aug 15 2001:
   - adds xmlLineNumbersDefault() to control line number generation
   - lot of bug fixes
   - the Microsoft MSC projects files should now be up to date
   - inheritance of namespaces from DTD defaulted attributes
   - fixes a serious potential security bug
   - added a --format option to xmllint


2.4.1:  July 24 2001:
   - possibility to keep line numbers in the tree
   - some computation NaN fixes
   - extension of the XPath API
   - cleanup for alpha and ia64 targets
   - patch to allow saving through HTTP PUT or POST


2.4.0: July 10 2001:
   - Fixed a few bugs in XPath, validation, and tree handling.
   - Fixed XML Base implementation, added a couple of examples to the
    regression tests
   - A bit of cleanup


2.3.14: July 5 2001:
   - fixed some entities problems and reduce memory requirement when
    substituting them
   - lots of improvements in the XPath queries interpreter can be
    substantially faster
   - Makefiles and configure cleanups
   - Fixes to XPath variable eval, and compare on empty node set
   - HTML tag closing bug fixed
   - Fixed an URI reference computation problem when validating


2.3.13: June 28 2001:
   - 2.3.12 configure.in was broken as well as the push mode XML parser
   - a few more fixes for compilation on Windows MSC by Yon Derek


1.8.14: June 28 2001:
   - Zbigniew Chyla gave a patch to use the old XML parser in push mode
   - Small Makefile fix


2.3.12: June 26 2001:
   - lots of cleanup
   - a couple of validation fix
   - fixed line number counting
   - fixed serious problems in the XInclude processing
   - added support for UTF8 BOM at beginning of entities
   - fixed a strange gcc optimizer bugs in xpath handling of float, gcc-3.0
    miscompile uri.c (William), Thomas Leitner provided a fix for the
    optimizer on Tru64
   - incorporated Yon Derek and Igor Zlatkovic  fixes and improvements for
    compilation on Windows MSC
   - update of libxml-doc.el (Felix Natter)
   - fixed 2 bugs in URI normalization code


2.3.11: June 17 2001:
   - updates to trio, Makefiles and configure should fix some portability
    problems (alpha)
   - fixed some HTML serialization problems (pre, script, and block/inline
    handling), added encoding aware APIs, cleanup of this code
   - added xmlHasNsProp()
   - implemented a specific PI for encoding support in the DocBook SGML
    parser
   - some XPath fixes (-Infinity, / as a function parameter and namespaces
    node selection)
   - fixed a performance problem and an error in the validation code
   - fixed XInclude routine to implement the recursive behaviour
   - fixed xmlFreeNode problem when libxml is included statically twice
   - added --version to xmllint for bug reports


2.3.10: June 1 2001:
   - fixed the SGML catalog support
   - a number of reported bugs got fixed, in XPath, iconv detection,
    XInclude processing
   - XPath string function should now handle unicode correctly


2.3.9: May 19 2001:
Lots of bugfixes, and added a basic SGML catalog support:
   - HTML push bugfix #54891 and another patch from Jonas Borgstrom
   - some serious speed optimization again
   - some documentation cleanups
   - trying to get better linking on Solaris (-R)
   - XPath API cleanup from Thomas Broyer
   - Validation bug fixed #54631, added a patch from Gary Pennington, fixed
    xmlValidGetValidElements()
   - Added an INSTALL file
   - Attribute removal added to API: #54433
   - added a basic support for SGML catalogs
   - fixed xmlKeepBlanksDefault(0) API
   - bugfix in xmlNodeGetLang()
   - fixed a small configure portability problem
   - fixed an inversion of SYSTEM and PUBLIC identifier in HTML document


1.8.13: May 14 2001:
   - bugfixes release of the old libxml1 branch used by Gnome


2.3.8: May 3 2001:
   - Integrated an SGML DocBook parser for the Gnome project
   - Fixed a few things in the HTML parser
   - Fixed some XPath bugs raised by XSLT use, tried to fix the floating
    point portability issue
   - Speed improvement (8M/s for SAX, 3M/s for DOM, 1.5M/s for
    DOM+validation using the XML REC as input and a 700MHz celeron).
   - incorporated more Windows cleanup
   - added xmlSaveFormatFile()
   - fixed problems in copying nodes with entities references (gdome)
   - removed some troubles surrounding the new validation module


2.3.7: April 22 2001:
   - lots of small bug fixes, corrected XPointer
   - Non deterministic content model validation support
   - added xmlDocCopyNode for gdome2
   - revamped the way the HTML parser handles end of tags
   - XPath: corrections of namespaces support and number formatting
   - Windows: Igor Zlatkovic patches for MSC compilation
   - HTML output fixes from P C Chow and William M. Brack
   - Improved validation speed sensible for DocBook
   - fixed a big bug with ID declared in external parsed entities
   - portability fixes, update of Trio from Bjorn Reese


2.3.6: April 8 2001:
   - Code cleanup using extreme gcc compiler warning options, found and
    cleared half a dozen potential problem
   - the Eazel team found an XML parser bug
   - cleaned up the user of some of the string formatting function. used the
    trio library code to provide the one needed when the platform is missing
    them
   - xpath: removed a memory leak and fixed the predicate evaluation
    problem, extended the testsuite and cleaned up the result. XPointer seems
    broken ...


2.3.5: Mar 23 2001:
   - Biggest change is separate parsing and evaluation of XPath expressions,
    there is some new APIs for this too
   - included a number of bug fixes(XML push parser, 51876, notations,
  52299)
   - Fixed some portability issues


2.3.4: Mar 10 2001:
   - Fixed bugs #51860 and #51861
   - Added a global variable xmlDefaultBufferSize to allow default buffer
    size to be application tunable.
   - Some cleanup in the validation code, still a bug left and this part
    should probably be rewritten to support ambiguous content model :-\
   - Fix a couple of serious bugs introduced or raised by changes in 2.3.3
    parser
   - Fixed another bug in xmlNodeGetContent()
   - Bjorn fixed XPath node collection and Number formatting
   - Fixed a loop reported in the HTML parsing
   - blank space are reported even if the Dtd content model proves that they
    are formatting spaces, this is for XML conformance


2.3.3: Mar 1 2001:
   - small change in XPath for XSLT
   - documentation cleanups
   - fix in validation by Gary Pennington
   - serious parsing performances improvements


2.3.2: Feb 24 2001:
   - chasing XPath bugs, found a bunch, completed some TODO
   - fixed a Dtd parsing bug
   - fixed a bug in xmlNodeGetContent
   - ID/IDREF support partly rewritten by Gary Pennington


2.3.1: Feb 15 2001:
   - some XPath and HTML bug fixes for XSLT
   - small extension of the hash table interfaces for DOM gdome2
    implementation
   - A few bug fixes


2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track):
   - Lots of XPath bug fixes
   - Add a mode with Dtd lookup but without validation error reporting for
    XSLT
   - Add support for text node without escaping (XSLT)
   - bug fixes for xmlCheckFilename
   - validation code bug fixes from Gary Pennington
   - Patch from Paul D. Smith correcting URI path normalization
   - Patch to allow simultaneous install of libxml-devel and
  libxml2-devel
   - the example Makefile is now fixed
   - added HTML to the RPM packages
   - tree copying bugfixes
   - updates to Windows makefiles
   - optimization patch from Bjorn Reese


2.2.11: Jan 4 2001:
   - bunch of bug fixes (memory I/O, xpath, ftp/http, ...)
   - added htmlHandleOmittedElem()
   - Applied Bjorn Reese's IPV6 first patch
   - Applied Paul D. Smith patches for validation of XInclude results
   - added XPointer xmlns() new scheme support


2.2.10: Nov 25 2000:
   - Fix the Windows problems of 2.2.8
   - integrate OpenVMS patches
   - better handling of some nasty HTML input
   - Improved the XPointer implementation
   - integrate a number of provided patches


2.2.9: Nov 25 2000:
   - erroneous release :-(


2.2.8: Nov 13 2000:
   - First version of XInclude
    support
   - Patch in conditional section handling
   - updated MS compiler project
   - fixed some XPath problems
   - added an URI escaping function
   - some other bug fixes


2.2.7: Oct 31 2000:
   - added message redirection
   - XPath improvements (thanks TOM !)
   - xmlIOParseDTD() added
   - various small fixes in the HTML, URI, HTTP and XPointer support
   - some cleanup of the Makefile, autoconf and the distribution content


2.2.6: Oct 25 2000::
   - Added an hash table module, migrated a number of internal structure to
    those
   - Fixed a posteriori validation problems
   - HTTP module cleanups
   - HTML parser improvements (tag errors, script/style handling, attribute
    normalization)
   - coalescing of adjacent text nodes
   - couple of XPath bug fixes, exported the internal API


2.2.5: Oct 15 2000::
   - XPointer implementation and testsuite
   - Lot of XPath fixes, added variable and functions registration, more
    tests
   - Portability fixes, lots of enhancements toward an easy Windows build
    and release
   - Late validation fixes
   - Integrated a lot of contributed patches
   - added memory management docs
   - a performance problem when using large buffer seems fixed


2.2.4: Oct 1 2000::
   - main XPath problem fixed
   - Integrated portability patches for Windows
   - Serious bug fixes on the URI and HTML code


2.2.3: Sep 17 2000:
   - bug fixes
   - cleanup of entity handling code
   - overall review of all loops in the parsers, all sprintf usage has been
    checked too
   - Far better handling of larges Dtd. Validating against DocBook XML Dtd
    works smoothly now.


1.8.10: Sep 6 2000:
   - bug fix release for some Gnome projects


2.2.2: August 12 2000:
   - mostly bug fixes
   - started adding routines to access xml parser context options


2.2.1: July 21 2000:
   - a purely bug fixes release
   - fixed an encoding support problem when parsing from a memory block
   - fixed a DOCTYPE parsing problem
   - removed a bug in the function allowing to override the memory
    allocation routines


2.2.0: July 14 2000:
   - applied a lot of portability fixes
   - better encoding support/cleanup and saving (content is now always
    encoded in UTF-8)
   - the HTML parser now correctly handles encodings
   - added xmlHasProp()
   - fixed a serious problem with &#38;
   - propagated the fix to FTP client
   - cleanup, bugfixes, etc ...
   - Added a page about libxml Internationalization
    support


1.8.9:  July 9 2000:
   - fixed the spec the RPMs should be better
   - fixed a serious bug in the FTP implementation, released 1.8.9 to solve
    rpmfind users problem


2.1.1: July 1 2000:
   - fixes a couple of bugs in the 2.1.0 packaging
   - improvements on the HTML parser


2.1.0 and 1.8.8: June 29 2000:
   - 1.8.8 is mostly a commodity package for upgrading to libxml2 according
    to new instructions. It fixes a nasty problem
    about &#38; charref parsing
   - 2.1.0 also ease the upgrade from libxml v1 to the recent version. it
    also contains numerous fixes and enhancements:
    
      added xmlStopParser() to stop parsing
      improved a lot parsing speed when there is large CDATA blocs
      includes XPath patches provided by Picdar Technology
      tried to fix as much as possible DTD validation and namespace
        related problems
      output to a given encoding has been added/tested
      lot of various fixes
    
  
   - added xmlStopParser() to stop parsing
   - improved a lot parsing speed when there is large CDATA blocs
   - includes XPath patches provided by Picdar Technology
   - tried to fix as much as possible DTD validation and namespace
        related problems
   - output to a given encoding has been added/tested
   - lot of various fixes


2.0.0: Apr 12 2000:
   - First public release of libxml2. If you are using libxml, it's a good
    idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
    scheduled for Apr 3 the release occurred only on Apr 12 due to massive
    workload.
   - The include are now located under $prefix/include/libxml (instead of
    $prefix/include/gnome-xml), they also are referenced by
    #include <libxml/xxx.h>
    instead of
    #include "xxx.h"
  
   - a new URI module for parsing URIs and following strictly RFC 2396
   - the memory allocation routines used by libxml can now be overloaded
    dynamically by using xmlMemSetup()
   - The previously CVS only tool tester has been renamed
    xmllint and is now installed as part of the libxml2
    package
   - The I/O interface has been revamped. There is now ways to plug in
    specific I/O modules, either at the URI scheme detection level using
    xmlRegisterInputCallbacks()  or by passing I/O functions when creating a
    parser context using xmlCreateIOParserCtxt()
   - there is a C preprocessor macro LIBXML_VERSION providing the version
    number of the libxml module in use
   - a number of optional features of libxml can now be excluded at
    configure time (FTP/HTTP/HTML/XPath/Debug)


2.0.0beta: Mar 14 2000:
   - This is a first Beta release of libxml version 2
   - It's available only fromxmlsoft.org
    FTP, it's packaged as libxml2-2.0.0beta and available as tar and
  RPMs
   - This version is now the head in the Gnome CVS base, the old one is
    available under the tag LIB_XML_1_X
   - This includes a very large set of changes. From a  programmatic point
    of view applications should not have to be modified too much, check the
    upgrade page
   - Some interfaces may changes (especially a bit about encoding).
   - the updates includes:
    
      fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
        handled now
      Better handling of entities, especially well-formedness checking
        and proper PEref extensions in external subsets
      DTD conditional sections
      Validation now correctly handle entities content
      change
        structures to accommodate DOM
    
  
   - fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
        handled now
   - Better handling of entities, especially well-formedness checking
        and proper PEref extensions in external subsets
   - DTD conditional sections
   - Validation now correctly handle entities content
   - change
        structures to accommodate DOM
   - Serious progress were made toward compliance, here are the result of the test against the
    OASIS testsuite (except the Japanese tests since I don't support that
    encoding yet). This URL is rebuilt every couple of hours using the CVS
    head version.


1.8.7: Mar 6 2000:
   - This is a bug fix release:
   - It is possible to disable the ignorable blanks heuristic used by
    libxml-1.x, a new function  xmlKeepBlanksDefault(0) will allow this. Note
    that for adherence to XML spec, this behaviour will be disabled by
    default in 2.x . The same function will allow to keep compatibility for
    old code.
   - Blanks in <a>  </a> constructs are not ignored anymore,
    avoiding heuristic is really the Right Way :-\
   - The unchecked use of snprintf which was breaking libxml-1.8.6
    compilation on some platforms has been fixed
   - nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
  URIs


1.8.6: Jan 31 2000:
   - added a nanoFTP transport module, debugged until the new version of rpmfind can use
    it without troubles


1.8.5: Jan 21 2000:
   - adding APIs to parse a well balanced chunk of XML (production [43] content of the
    XML spec)
   - fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no
   - Jody Goldberg <jgoldberg@home.com> provided another patch trying
    to solve the zlib checks problems
   - The current state in gnome CVS base is expected to ship as 1.8.5 with
    gnumeric soon


1.8.4: Jan 13 2000:
   - bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()
   - all exit() call should have been removed from libxml
   - fixed a problem with INCLUDE_WINSOCK on WIN32 platform
   - added newDocFragment()


1.8.3: Jan 5 2000:
   - a Push interface for the XML and HTML parsers
   - a shell-like interface to the document tree (try tester --shell :-)
   - lots of bug fixes and improvement added over XMas holidays
   - fixed the DTD parsing code to work with the xhtml DTD
   - added xmlRemoveProp(), xmlRemoveID() and xmlRemoveRef()
   - Fixed bugs in xmlNewNs()
   - External entity loading code has been revamped, now it uses
    xmlLoadExternalEntity(), some fix on entities processing were added
   - cleaned up WIN32 includes of socket stuff


1.8.2: Dec 21 1999:
   - I got another problem with includes and C++, I hope this issue is fixed
    for good this time
   - Added a few tree modification functions: xmlReplaceNode,
    xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
    xmlDocSetRootElement
   - Tried to improve the HTML output with help from Chris Lahey


1.8.1: Dec 18 1999:
   - various patches to avoid troubles when using libxml with C++ compilers
    the "namespace" keyword and C escaping in include files
   - a problem in one of the core macros IS_CHAR was corrected
   - fixed a bug introduced in 1.8.0 breaking default namespace processing,
    and more specifically the Dia application
   - fixed a posteriori validation (validation after parsing, or by using a
    Dtd not specified in the original document)
   - fixed a bug in


1.8.0: Dec 12 1999:
   - cleanup, especially memory wise
   - the parser should be more reliable, especially the HTML one, it should
    not crash, whatever the input !
   - Integrated various patches, especially a speedup improvement for large
    dataset from Carl Nygard,
    configure with --with-buffers to enable them.
   - attribute normalization, oops should have been added long ago !
   - attributes defaulted from DTDs should be available, xmlSetProp() now
    does entities escaping by default.


1.7.4: Oct 25 1999:
   - Lots of HTML improvement
   - Fixed some errors when saving both XML and HTML
   - More examples, the regression tests should now look clean
   - Fixed a bug with contiguous charref


1.7.3: Sep 29 1999:
   - portability problems fixed
   - snprintf was used unconditionally, leading to link problems on system
    were it's not available, fixed


1.7.1: Sep 24 1999:
   - The basic type for strings manipulated by libxml has been renamed in
    1.7.1 from CHAR to xmlChar. The reason
    is that CHAR was conflicting with a predefined type on Windows. However
    on non WIN32 environment, compatibility is provided by the way of  a
    #define .
   - Changed another error : the use of a structure field called errno, and
    leading to troubles on platforms where it's a macro


1.7.0: Sep 23 1999:
   - Added the ability to fetch remote DTD or parsed entities, see the nanohttp module.
   - Added an errno to report errors by another mean than a simple printf
    like callback
   - Finished ID/IDREF support and checking when validation
   - Serious memory leaks fixed (there is now a memory wrapper module)
   - Improvement of XPath
    implementation
   - Added an HTML parser front-end

Daniel Veillard at 
bugs.html
