UNPKG

libxmljs

Version:

libxml bindings for v8 javascript engine

939 lines (883 loc) 340 kB
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>The XML C parser and toolkit of Gnome</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body bgcolor="#ffffff"> <h1 align="center">The XML C parser and toolkit of Gnome</h1> <h1>Note: this is the flat content of the <a href="index.html">web site</a></h1> <h1 style="text-align: center">libxml, a.k.a. gnome-xml</h1> <p></p> <p style="text-align: right; font-style: italic; font-size: 10pt">"Programming with libxml2 is like the thrilling embrace of an exotic stranger." <a href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark Pilgrim</a></p> <p>Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform), it is free software available under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT License</a>. XML itself is a metalanguage to design markup languages, i.e. text language where semantic and structure are added to the content using extra "markup" information enclosed between angle brackets. HTML is the most well-known markup language. Though the library is written in C <a href="python.html">a variety of language bindings</a> make it available in other environments.</p> <p>Libxml2 is known to be very portable, the library should build and work without serious troubles on a variety of systems (Linux, Unix, Windows, CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)</p> <p>Libxml2 implements a number of existing standards related to markup languages:</p> <ul> <li>the XML standard: <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li> <li>Namespaces in XML: <a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li> <li>XML Base: <a href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li> <li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> : Uniform Resource Identifiers <a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></li> <li>XML Path Language (XPath) 1.0: <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a></li> <li>HTML4 parser: <a href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li> <li>XML Pointer Language (XPointer) Version 1.0: <a href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr</a></li> <li>XML Inclusions (XInclude) Version 1.0: <a href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/</a></li> <li>ISO-8859-x encodings, as well as <a href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044</a> [UTF-8] and <a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781</a> [UTF-16] Unicode encodings, and more if using iconv support</li> <li>part of SGML Open Technical Resolution TR9401:1997</li> <li>XML Catalogs Working Draft 06 August 2001: <a href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html</a></li> <li>Canonical XML Version 1.0: <a href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n</a> and the Exclusive XML Canonicalization CR draft <a href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n</a></li> <li>Relax NG, ISO/IEC 19757-2:2003, <a href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html</a></li> <li>W3C XML Schemas Part 2: Datatypes <a href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May 2001</a></li> <li>W3C <a href="http://www.w3.org/TR/xml-id/">xml:id</a> Working Draft 7 April 2004</li> </ul> <p>In most cases libxml2 tries to implement the specifications in a relatively strictly compliant way. As of release 2.4.16, libxml2 passed all 1800+ tests from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests Suite</a>.</p> <p>To some extent libxml2 provides support for the following additional specifications but doesn't claim to implement them completely:</p> <ul> <li>Document Object Model (DOM) <a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a> the document model, but it doesn't implement the API itself, gdome2 does this on top of libxml2</li> <li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> : libxml2 implements a basic FTP client code</li> <li><a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945</a> : HTTP/1.0, again a basic HTTP client code</li> <li>SAX: a SAX2 like interface and a minimal SAX1 implementation compatible with early expat versions</li> </ul> <p>A partial implementation of <a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part 1: Structure</a> is being worked on but it would be far too early to make any conformance statement about it at the moment.</p> <p>Separate documents:</p> <ul> <li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an implementation of XSLT 1.0 and common extensions like EXSLT for libxml2</li> <li><a href="http://gdome2.cs.unibo.it/">the gdome2 page</a> : a standard DOM2 implementation for libxml2</li> <li><a href="http://www.aleksey.com/xmlsec/">the XMLSec page</a>: an implementation of <a href="http://www.w3.org/TR/xmldsig-core/">W3C XML Digital Signature</a> for libxml2</li> <li>also check the related links section for more related and active projects.</li> </ul> <p> Hosting sponsored by <a href="http://www.aoemedia.de/opensource-cms.html" >Open Source CMS services</a> from AOE media.</p> <p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p> <h2><a name="Introducti">Introduction</a></h2> <p>This document describes libxml, the <a href="http://www.w3.org/XML/">XML</a> C parser and toolkit developed for the <a href="http://www.gnome.org/">Gnome</a> project. <a href="http://www.w3.org/XML/">XML is a standard</a> for building tag-based structured documents/data.</p> <p>Here are some key points about libxml:</p> <ul> <li>Libxml2 exports Push (progressive) and Pull (blocking) type parser interfaces for both XML and HTML.</li> <li>Libxml2 can do DTD validation at parse time, using a parsed document instance, or with an arbitrary DTD.</li> <li>Libxml2 includes complete <a href="http://www.w3.org/TR/xpath">XPath</a>, <a href="http://www.w3.org/TR/xptr">XPointer</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a> implementations.</li> <li>It is written in plain C, making as few assumptions as possible, and sticking closely to ANSI C/POSIX for easy embedding. Works on Linux/Unix/Windows, ported to a number of other platforms.</li> <li>Basic support for HTTP and FTP client allowing applications to fetch remote resources.</li> <li>The design is modular, most of the extensions can be compiled out.</li> <li>The internal document representation is as close as possible to the <a href="http://www.w3.org/DOM/">DOM</a> interfaces.</li> <li>Libxml2 also has a <a href="http://www.megginson.com/SAX/index.html">SAX like interface</a>; the interface is designed to be compatible with <a href="http://www.jclark.com/xml/expat.html">Expat</a>.</li> <li>This library is released under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT License</a>. See the Copyright file in the distribution for the precise wording.</li> </ul> <p>Warning: unless you are forced to because your application links with a Gnome-1.X library requiring it, <strong><span style="background-color: #FF0000">Do Not Use libxml1</span></strong>, use libxml2</p> <h2><a name="FAQ">FAQ</a></h2> <p>Table of Contents:</p> <ul> <li><a href="FAQ.html#License">License(s)</a></li> <li><a href="FAQ.html#Installati">Installation</a></li> <li><a href="FAQ.html#Compilatio">Compilation</a></li> <li><a href="FAQ.html#Developer">Developer corner</a></li> </ul> <h3><a name="License">License</a>(s)</h3> <ol> <li><em>Licensing Terms for libxml</em> <p>libxml2 is released under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT License</a>; see the file Copyright in the distribution for the precise wording</p> </li> <li><em>Can I embed libxml2 in a proprietary application ?</em> <p>Yes. The MIT License allows you to keep proprietary the changes you made to libxml, but it would be graceful to send-back bug fixes and improvements as patches for possible incorporation in the main development tree.</p> </li> </ol> <h3><a name="Installati">Installation</a></h3> <ol> <li><strong><span style="background-color: #FF0000">Do Not Use libxml1</span></strong>, use libxml2<p></p></li> <li><em>Where can I get libxml</em> ? <p>The original distribution comes from <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> or <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">gnome.org</a></p> <p>Most Linux and BSD distributions include libxml, this is probably the safer way for end-users to use libxml.</p> <p>David Doolin provides precompiled Windows versions at <a href="http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/ ">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/</a></p> </li> <li><em>I see libxml and libxml2 releases, which one should I install ?</em> <ul> <li>If you are not constrained by backward compatibility issues with existing applications, install libxml2 only</li> <li>If you are not doing development, you can safely install both. Usually the packages <a href="http://rpmfind.net/linux/RPM/libxml.html">libxml</a> and <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml2</a> are compatible (this is not the case for development packages).</li> <li>If you are a developer and your system provides separate packaging for shared libraries and the development components, it is possible to install libxml and libxml2, and also <a href="http://rpmfind.net/linux/RPM/libxml-devel.html">libxml-devel</a> and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml2-devel</a> too for libxml2 &gt;= 2.3.0</li> <li>If you are developing a new application, please develop against libxml2(-devel)</li> </ul> <p></p> </li> <li><em>I can't install the libxml package, it conflicts with libxml0</em> <p>You probably have an old libxml0 package used to provide the shared library for libxml.so.0, you can probably safely remove it. The libxml packages provided on <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> provide libxml.so.0</p> </li> <li><em>I can't install the libxml(2) RPM package due to failed dependencies</em> <p>The most generic solution is to re-fetch the latest src.rpm , and rebuild it locally with</p> <p><code>rpm --rebuild libxml(2)-xxx.src.rpm</code>.</p> <p>If everything goes well it will generate two binary rpm packages (one providing the shared libs and xmllint, and the other one, the -devel package, providing includes, static libraries and scripts needed to build applications with libxml(2)) that you can install locally.</p> </li> </ol> <h3><a name="Compilatio">Compilation</a></h3> <ol> <li><em>What is the process to compile libxml2 ?</em> <p>As most UNIX libraries libxml2 follows the "standard":</p> <p><code>gunzip -c xxx.tar.gz | tar xvf -</code></p> <p><code>cd libxml-xxxx</code></p> <p><code>./configure --help</code></p> <p>to see the options, then the compilation/installation proper</p> <p><code>./configure [possible options]</code></p> <p><code>make</code></p> <p><code>make install</code></p> <p>At that point you may have to rerun ldconfig or a similar utility to update your list of installed shared libs.</p> </li> <li><em>What other libraries are needed to compile/install libxml2 ?</em> <p>Libxml2 does not require any other library, the normal C ANSI API should be sufficient (please report any violation to this rule you may find).</p> <p>However if found at configuration time libxml2 will detect and use the following libs:</p> <ul> <li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a highly portable and available widely compression library.</li> <li>iconv: a powerful character encoding conversion library. It is included by default in recent glibc libraries, so it doesn't need to be installed specifically on Linux. It now seems a <a href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part of the official UNIX</a> specification. Here is one <a href="http://www.gnu.org/software/libiconv/">implementation of the library</a> which source can be found <a href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here</a>.</li> </ul> <p></p> </li> <li><em>Make check fails on some platforms</em> <p>Sometimes the regression tests' results don't completely match the value produced by the parser, and the makefile uses diff to print the delta. On some platforms the diff return breaks the compilation process; if the diff is small this is probably not a serious problem.</p> <p>Sometimes (especially on Solaris) make checks fail due to limitations in make. Try using GNU-make instead.</p> </li> <li><em>I use the SVN version and there is no configure script</em> <p>The configure script (and other Makefiles) are generated. Use the autogen.sh script to regenerate the configure script and Makefiles, like:</p> <p><code>./autogen.sh --prefix=/usr --disable-shared</code></p> </li> <li><em>I have troubles when running make tests with gcc-3.0</em> <p>It seems the initial release of gcc-3.0 has a problem with the optimizer which miscompiles the URI module. Please use another compiler.</p> </li> </ol> <h3><a name="Developer">Developer</a> corner</h3> <ol> <li><em>Troubles compiling or linking programs using libxml2</em> <p>Usually the problem comes from the fact that the compiler doesn't get the right compilation or linking flags. There is a small shell script <code>xml2-config</code> which is installed as part of libxml2 usual install process which provides those flags. Use</p> <p><code>xml2-config --cflags</code></p> <p>to get the compilation flags and</p> <p><code>xml2-config --libs</code></p> <p>to get the linker flags. Usually this is done directly from the Makefile as:</p> <p><code>CFLAGS=`xml2-config --cflags`</code></p> <p><code>LIBS=`xml2-config --libs`</code></p> </li> <li><em>I want to install my own copy of libxml2 in my home directory and link my programs against it, but it doesn't work</em> <p>There are many different ways to accomplish this. Here is one way to do this under Linux. Suppose your home directory is <code>/home/user. </code>Then:</p> <ul> <li>Create a subdirectory, let's call it <code>myxml</code></li> <li>unpack the libxml2 distribution into that subdirectory</li> <li>chdir into the unpacked distribution (<code>/home/user/myxml/libxml2 </code>)</li> <li>configure the library using the "<code>--prefix</code>" switch, specifying an installation subdirectory in <code>/home/user/myxml</code>, e.g. <p><code>./configure --prefix /home/user/myxml/xmlinst</code> {other configuration options}</p> </li> <li>now run <code>make</code> followed by <code>make install</code></li> <li>At this point, the installation subdirectory contains the complete "private" include files, library files and binary program files (e.g. xmllint), located in <p><code>/home/user/myxml/xmlinst/lib, /home/user/myxml/xmlinst/include </code> and <code> /home/user/myxml/xmlinst/bin</code></p> respectively.</li> <li>In order to use this "private" library, you should first add it to the beginning of your default PATH (so that your own private program files such as xmllint will be used instead of the normal system ones). To do this, the Bash command would be <p><code>export PATH=/home/user/myxml/xmlinst/bin:$PATH</code></p> </li> <li>Now suppose you have a program <code>test1.c</code> that you would like to compile with your "private" library. Simply compile it using the command <p><code>gcc `xml2-config --cflags --libs` -o test test.c</code></p> Note that, because your PATH has been set with <code> /home/user/myxml/xmlinst/bin</code> at the beginning, the xml2-config program which you just installed will be used instead of the system default one, and this will <em>automatically</em> get the correct libraries linked with your program.</li> </ul> <p></p> </li> <li><em>xmlDocDump() generates output on one line.</em> <p>Libxml2 will not <strong>invent</strong> spaces in the content of a document since <strong>all spaces in the content of a document are significant</strong>. If you build a tree from the API and want indentation:</p> <ol> <li>the correct way is to generate those yourself too.</li> <li>the dangerous way is to ask libxml2 to add those blanks to your content <strong>modifying the content of your document in the process</strong>. The result may not be what you expect. There is <strong>NO</strong> way to guarantee that such a modification won't affect other parts of the content of your document. See <a href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault ()</a> and <a href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile ()</a></li> </ol> <p></p> </li> <li><em>Extra nodes in the document:</em> <p><em>For an XML file as below:</em></p> <pre>&lt;?xml version="1.0"?&gt; &lt;PLAN xmlns="http://www.argus.ca/autotest/1.0/"&gt; &lt;NODE CommFlag="0"/&gt; &lt;NODE CommFlag="1"/&gt; &lt;/PLAN&gt;</pre> <p><em>after parsing it with the function pxmlDoc=xmlParseFile(...);</em></p> <p><em>I want to the get the content of the first node (node with the CommFlag="0")</em></p> <p><em>so I did it as following;</em></p> <pre>xmlNodePtr pnode; pnode=pxmlDoc-&gt;children-&gt;children;</pre> <p><em>but it does not work. If I change it to</em></p> <pre>pnode=pxmlDoc-&gt;children-&gt;children-&gt;next;</pre> <p><em>then it works. Can someone explain it to me.</em></p> <p></p> <p>In XML all characters in the content of the document are significant <strong>including blanks and formatting line breaks</strong>.</p> <p>The extra nodes you are wondering about are just that, text nodes with the formatting spaces which are part of the document but that people tend to forget. There is a function <a href="http://xmlsoft.org/html/libxml-parser.html">xmlKeepBlanksDefault ()</a> to remove those at parse time, but that's an heuristic, and its use should be limited to cases where you are certain there is no mixed-content in the document.</p> </li> <li><em>I get compilation errors of existing code like when accessing <strong>root</strong> or <strong>child fields</strong> of nodes.</em> <p>You are compiling code developed for libxml version 1 and using a libxml2 development environment. Either switch back to libxml v1 devel or even better fix the code to compile with libxml2 (or both) by <a href="upgrade.html">following the instructions</a>.</p> </li> <li><em>I get compilation errors about non existing <strong>xmlRootNode</strong> or <strong>xmlChildrenNode</strong> fields.</em> <p>The source code you are using has been <a href="upgrade.html">upgraded</a> to be able to compile with both libxml and libxml2, but you need to install a more recent version: libxml(-devel) &gt;= 1.8.8 or libxml2(-devel) &gt;= 2.1.0</p> </li> <li><em>Random crashes in threaded applications</em> <p>Read and follow all advices on the <a href="threads.html">thread safety</a> page, and make 100% sure you never call xmlCleanupParser() while the library or an XML document might still be in use by another thread.</p> </li> <li><em>The example provided in the web page does not compile.</em> <p>It's hard to maintain the documentation in sync with the code &lt;grin/&gt; ...</p> <p>Check the previous points 1/ and 2/ raised before, and please send patches.</p> </li> <li><em>Where can I get more examples and information than provided on the web page?</em> <p>Ideally a libxml2 book would be nice. I have no such plan ... But you can:</p> <ul> <li>check more deeply the <a href="html/libxml-lib.html">existing generated doc</a></li> <li>have a look at <a href="examples/index.html">the set of examples</a>.</li> <li>look for examples of use for libxml2 function using the Gnome code or by asking on Google.</li> <li><a href="http://svn.gnome.org/viewvc/libxml2/trunk/">Browse the libxml2 source</a> , I try to write code as clean and documented as possible, so looking at it may be helpful. In particular the code of <a href="http://svn.gnome.org/viewvc/libxml2/trunk/xmllint.c?view=markup">xmllint.c</a> and of the various testXXX.c test programs should provide good examples of how to do things with the library.</li> </ul> <p></p> </li> <li><em>What about C++ ?</em> <p>libxml2 is written in pure C in order to allow easy reuse on a number of platforms, including embedded systems. I don't intend to convert to C++.</p> <p>There is however a C++ wrapper which may fulfill your needs:</p> <ul> <li>by Ari Johnson &lt;ari@btigate.com&gt;: <p>Website: <a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p> <p>Download: <a href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p> </li> </ul> </li> <li><em>How to validate a document a posteriori ?</em> <p>It is possible to validate documents which had not been validated at initial parsing time or documents which have been built from scratch using the API. Use the <a href="http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd()</a> function. It is also possible to simply add a DTD to an existing document:</p> <pre>xmlDocPtr doc; /* your existing document */ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */ dtd-&gt;name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */ doc-&gt;intSubset = dtd; if (doc-&gt;children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd); else xmlAddPrevSibling(doc-&gt;children, (xmlNodePtr)dtd); </pre> </li> <li><em>So what is this funky "xmlChar" used all the time?</em> <p>It is a null terminated sequence of utf-8 characters. And only utf-8! You need to convert strings encoded in different ways to utf-8 before passing them to the API. This can be accomplished with the iconv library for instance.</p> </li> <li>etc ...</li> </ol> <p></p> <h2><a name="Documentat">Developer Menu</a></h2> <p>There are several on-line resources related to using libxml:</p> <ol> <li>Use the <a href="search.php">search engine</a> to look up information.</li> <li>Check the <a href="FAQ.html">FAQ.</a></li> <li>Check the <a href="http://xmlsoft.org/html/libxml-lib.html">extensive documentation</a> automatically extracted from code comments.</li> <li>Look at the documentation about <a href="encoding.html">libxml internationalization support</a>.</li> <li>This page provides a global overview and <a href="example.html">some examples</a> on how to use libxml.</li> <li><a href="examples/index.html">Code examples</a></li> <li>John Fleck's libxml2 tutorial: <a href="tutorial/index.html">html</a> or <a href="tutorial/xmltutorial.pdf">pdf</a>.</li> <li>If you need to parse large files, check the <a href="xmlreader.html">xmlReader</a> API tutorial</li> <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">some nice documentation</a> explaining how to use the libxml SAX interface.</li> <li>George Lebl wrote <a href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article for IBM developerWorks</a> about using libxml.</li> <li>Check <a href="http://svn.gnome.org/viewvc/libxml2/trunk/TODO?view=markup">the TODO file</a>.</li> <li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a> description. If you are starting a new project using libxml you should really use the 2.x version.</li> <li>And don't forget to look at the <a href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li> </ol> <h2><a name="Reporting">Reporting bugs and getting help</a></h2> <p>Well, bugs or missing features are always possible, and I will make a point of fixing them in a timely fashion. The best way to report a bug is to use the <a href="https://gitlab.gnome.org/GNOME/libxml2/issues">Gnome bug tracking database</a> (make sure to use the "libxml2" module name). I look at reports there regularly and it's good to have a reminder when a bug is still open. Be sure to specify that the bug is for the package libxml2.</p> <p>For small problems you can try to get help on IRC, the #xml channel on irc.gnome.org (port 6667) usually has a few people subscribed which may help (but there is no guarantee and if a real issue is raised it should go on the mailing-list for archival).</p> <p>There is also a mailing-list <a href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an <a href="http://mail.gnome.org/archives/xml/">on-line archive</a> (<a href="http://xmlsoft.org/messages">old</a>). To subscribe to this list, please visit the <a href="http://mail.gnome.org/mailman/listinfo/xml">associated Web</a> page and follow the instructions. <strong>Do not send code, I won't debug it</strong> (but patches are really appreciated!).</p> <p>Please note that with the current amount of virus and SPAM, sending mail to the list without being subscribed won't work. There is *far too many bounces* (in the order of a thousand a day !) I cannot approve them manually anymore. If your mail to the list bounced waiting for administrator approval, it is LOST ! Repost it and fix the problem triggering the error. Also please note that <span style="color: #FF0000; background-color: #FFFFFF">emails with a legal warning asking to not copy or redistribute freely the information they contain</span> are <strong>NOT</strong> acceptable for the mailing-list, such mail will as much as possible be discarded automatically, and are less likely to be answered if they made it to the list, <strong>DO NOT</strong> post to the list from an email address where such legal requirements are automatically added, get private paying support if you can't share information.</p> <p>Check the following <strong><span style="color: #FF0000">before posting</span></strong>:</p> <ul> <li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the search engine</a> to get information related to your problem.</li> <li>Make sure you are <a href="ftp://xmlsoft.org/libxml2/">using a recent version</a>, and that the problem still shows up in a recent version.</li> <li>Check the <a href="http://mail.gnome.org/archives/xml/">list archives</a> to see if the problem was reported already. In this case there is probably a fix available, similarly check the <a href="https://gitlab.gnome.org/GNOME/libxml2/issues">registered open bugs</a>.</li> <li>Make sure you can reproduce the bug with xmllint or one of the test programs found in source in the distribution.</li> <li>Please send the command showing the error as well as the input (as an attachment)</li> </ul> <p>Then send the bug with associated information to reproduce it to the <a href="mailto:xml@gnome.org">xml@gnome.org</a> list; if it's really libxml related I will approve it. Please do not send mail to me directly, it makes things really hard to track and in some cases I am not the best person to answer a given question, ask on the list.</p> <p>To <span style="color: #E50000">be really clear about support</span>:</p> <ul> <li>Support or help <span style="color: #E50000">requests MUST be sent to the list or the bug tracker</span> in case of problems, so that the Question and Answers can be shared publicly. Failing to do so carries the implicit message "I want free support but I don't want to share the benefits with others" and is not welcome. I will automatically Carbon-Copy the xml@gnome.org mailing list for any technical reply made about libxml2 or libxslt.</li> <li>There is <span style="color: #E50000">no guarantee of support</span>. If your question remains unanswered after a week, repost it, making sure you gave all the detail needed and the information requested.</li> <li>Failing to provide information as requested or double checking first for prior feedback also carries the implicit message "the time of the library maintainers is less valuable than my time" and might not be welcome.</li> </ul> <p>Of course, bugs reported with a suggested patch for fixing them will probably be processed faster than those without.</p> <p>If you're looking for help, a quick look at <a href="http://mail.gnome.org/archives/xml/">the list archive</a> may actually provide the answer. I usually send source samples when answering libxml2 usage questions. The <a href="http://xmlsoft.org/html/book1.html">auto-generated documentation</a> is not as polished as I would like (i need to learn more about DocBook), but it's a good starting point.</p> <h2><a name="help">How to help</a></h2> <p>You can help the project in various ways, the best thing to do first is to subscribe to the mailing-list as explained before, check the <a href="http://mail.gnome.org/archives/xml/">archives </a>and the <a href="https://gitlab.gnome.org/GNOME/libxml2/issues">Gnome bug database</a>:</p> <ol> <li>Provide patches when you find problems.</li> <li>Provide the diffs when you port libxml2 to a new platform. They may not be integrated in all cases but help pinpointing portability problems and</li> <li>Provide documentation fixes (either as patches to the code comments or as HTML diffs).</li> <li>Provide new documentations pieces (translations, examples, etc ...).</li> <li>Check the TODO file and try to close one of the items.</li> <li>Take one of the points raised in the archive or the bug database and provide a fix. <a href="mailto:daniel@veillard.com">Get in touch with me </a>before to avoid synchronization problems and check that the suggested fix will fit in nicely :-)</li> </ol> <h2><a name="Downloads">Downloads</a></h2> <p>The latest versions of libxml2 can be found on the <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> server ( <a href="ftp://xmlsoft.org/libxml2/">FTP</a> and rsync are available), there are also mirrors (<a href="ftp://fr.rpmfind.net/pub/libxml/">France</a> and Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a mirror in Austria</a>). (NOTE that you need both the <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a> packages installed to compile applications using libxml if using RPMs.)</p> <p>You can find all the history of libxml(2) and libxslt releases in the <a href="http://xmlsoft.org/sources/old/">old</a> directory. The precompiled Windows binaries made by Igor Zlatovic are available in the <a href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p> <p>Binary ports:</p> <ul> <li>RPMs for x86_64 are available directly on <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a>, the source RPM will compile on any architecture supported.</li> <li><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a> is now the maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides binaries</a>.</li> <li>OpenCSW provides <a href="http://opencsw.org/packages/libxml2">Solaris binaries</a>.</li> <li><a href="mailto:Steve.Ball@explain.com.au">Steve Ball</a> provides <a href="http://www.explain.com.au/oss/libxml2xslt.html">Mac Os X binaries</a>.</li> <li>The HP-UX porting center provides <a href="http://hpux.connect.org.uk/hppd/hpux/Gnome/">HP-UX binaries</a></li> <li>Bull provides precompiled <a href="http://gnome.bullfreeware.com/new_index.html">RPMs for AIX</a> as patr of their GNOME packages</li> </ul> <p>If you know other supported binary ports, please <a href="http://veillard.com/">contact me</a>.</p> <p><a name="Snapshot">Snapshot:</a></p> <ul> <li>Code from the GNOME GIT base libxml2 module, updated hourly <a href="ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz">libxml2-git-snapshot.tar.gz</a>.</li> <li>Docs, content of the web site, the list archive included <a href="ftp://xmlsoft.org/libxml2/libxml-docs.tar.gz">libxml-docs.tar.gz</a>.</li> </ul> <p><a name="Contribs">Contributions:</a></p> <p>I do accept external contributions, especially if compiling on another platform, get in touch with the list to upload the package, wrappers for various languages have been provided, and can be found in the <a href="python.html">bindings section</a></p> <p>Libxml2 is also available from GIT:</p> <ul> <li><p>See <a href="https://gitlab.gnome.org/GNOME/libxml2">libxml2 Git web</a>. To checkout a local tree use:</p> <pre>git clone https://gitlab.gnome.org/GNOME/libxml2.git</pre> </li> <li>The <strong>libxslt</strong> module is also present <a href="https://gitlab.gnome.org/GNOME/libxslt">there</a>.</li> </ul> <h2><a name="News">Releases</a></h2> <p>The <a href="ChangeLog.html">change log</a> describes the recents commits to the <a href="https://gitlab.gnome.org/GNOME/libxml2">GIT</a> code base.</p> <p>Here is the list of public releases:</p> <h3>v2.9.11: May 13 2021</h3> <ul> <li>Security:<br/> Patch for security issue CVE-2021-3541 (Daniel Veillard)<br/> </li> <li>Documentation:<br/> Clarify xmlNewDocProp documentation (Nick Wellnhofer)<br/> </li> <li>Portability:<br/> CMake: Only add postfixes if MSVC (Christopher Degawa),<br/> Fix XPath NaN/Inf for older GCC versions (Nick Wellnhofer),<br/> Use CMake PROJECT_VERSION (Markus Rickert),<br/> Fix warnings in libxml.m4 with autoconf 2.70+. (Simon Josefsson),<br/> Add CI for CMake on MSVC (Markus Rickert),<br/> Update minimum required CMake version (Markus Rickert),<br/> Add variables for configured options to CMake config files (Markus Rickert),<br/> Check if variables exist when defining targets (Markus Rickert),<br/> Check if target exists when reading target properties (Markus Rickert),<br/> Add xmlcatalog target and definition to config files (Markus Rickert),<br/> Remove include directories for link-only dependencies (Markus Rickert),<br/> Fix ICU build in CMake (Markus Rickert),<br/> Configure pkgconfig, xml2-config, and xml2Conf.sh file (Markus Rickert),<br/> Update CMake config files (Markus Rickert),<br/> Add xmlcatalog and xmllint to CMake export (Markus Rickert),<br/> Simplify xmlexports.h (Nick Wellnhofer),<br/> Require dependencies based on enabled CMake options (Markus Rickert),<br/> Use NAMELINK_COMPONENT in CMake install (Markus Rickert),<br/> Add CMake files to EXTRA_DIST (Markus Rickert),<br/> Add missing compile definition for static builds to CMake (Markus Rickert),<br/> Add CI for CMake on Linux and MinGW (Markus Rickert),<br/> Fix variable name in win32/configure.js (Nick Wellnhofer),<br/> Fix version parsing in win32/configure.js (Nick Wellnhofer),<br/> Fix autotools warnings (Nick Wellnhofer),<br/> Update config.h.cmake.in (Markus Rickert),<br/> win32: allow passing *FLAGS on command line (Michael Stahl),<br/> Configure file xmlwin32version.h.in on MSVC (Markus Rickert),<br/> List headers individually (Markus Rickert),<br/> Add CMake build files (Markus Rickert),<br/> Parenthesize Py&lt;type&gt;_Check() in ifs (Miro Hrončok),<br/> Minor fixes to configure.js (Nick Wellnhofer)<br/> </li> <li>Bug Fixes:<br/> Fix null deref in legacy SAX1 parser (Nick Wellnhofer),<br/> Fix handling of unexpected EOF in xmlParseContent (Nick Wellnhofer),<br/> Fix line numbers in error messages for mismatched tags (Nick Wellnhofer),<br/> Fix htmlTagLookup (Nick Wellnhofer),<br/> Propagate error in xmlParseElementChildrenContentDeclPriv (Nick Wellnhofer),<br/> Fix user-after-free with `xmllint --xinclude --dropdtd` (Nick Wellnhofer),<br/> Fix dangling pointer with `xmllint --dropdtd` (Nick Wellnhofer),<br/> Validate UTF8 in xmlEncodeEntities (Joel Hockey),<br/> Fix use-after-free with `xmllint --html --push` (Nick Wellnhofer),<br/> Allow FP division by zero in xmlXPathInit (Nick Wellnhofer),<br/> Fix xmlGetNodePath with invalid node types (Nick Wellnhofer),<br/> Fix exponential behavior with recursive entities (Nick Wellnhofer),<br/> Fix quadratic behavior when looking up xml:* attributes (Nick Wellnhofer),<br/> Fix slow parsing of HTML with encoding errors (Nick Wellnhofer),<br/> Fix null deref introduced with previous commit (Nick Wellnhofer),<br/> Check for invalid redeclarations of predefined entities (Nick Wellnhofer),<br/> Add the copy of type from original xmlDoc in xmlCopyDoc() (SVGAnimate),<br/> parser.c: shrink the input buffer when appropriate (Mike Dalessio),<br/> Fix infinite loop in HTML parser introduced with recent commits (Nick Wellnhofer),<br/> Fix quadratic runtime when parsing CDATA sections (Nick Wellnhofer),<br/> Fix timeout when handling recursive entities (Nick Wellnhofer),<br/> Fix memory leak in xmlParseElementMixedContentDecl (Nick Wellnhofer),<br/> Fix null deref in xmlStringGetNodeList (Nick Wellnhofer),<br/> use new htmlParseLookupCommentEnd to find comment ends (Mike Dalessio),<br/> htmlParseComment: treat `--!&gt;` as if it closed the comment (Mike Dalessio),<br/> Fix integer overflow in xmlSchemaGetParticleTotalRangeMin (Nick Wellnhofer),<br/> encoding: fix memleak in xmlRegisterCharEncodingHandler() (Xiaoming Ni),<br/> xmlschemastypes.c: xmlSchemaGetFacetValueAsULong add, check "facet-&gt;val" (Xiaoming Ni),<br/> Fix null pointer deref in xmlXPtrRangeInsideFunction (Nick Wellnhofer),<br/> Fix quadratic runtime in HTML push parser with null bytes (Nick Wellnhofer),<br/> Avoid quadratic checking of identity-constraints (Michael Matz),<br/> Fix building with ICU 68. (Frederik Seiffert),<br/> Convert python/libxml.c to PY_SSIZE_T_CLEAN (Victor Stinner),<br/> Fix xmlURIEscape memory leaks. (Elliott Hughes),<br/> Avoid call stack overflow with XML reader and recursive XIncludes (Nick Wellnhofer),<br/> Fix caret in regexp character group (Nick Wellnhofer),<br/> parser.c: xmlParseCharData peek behavior fixed wrt newlines (Mike Dalessio),<br/> Fix memory leaks in XPointer string-range function (Nick Wellnhofer),<br/> Fix use-after-free when XIncluding text from Reader (Nick Wellnhofer),<br/> Fix SEGV in xmlSAXParseFileWithData (yanjinjq),<br/> Fix null deref in XPointer expression error path (Nick Wellnhofer),<br/> Don't call xmlXPathInit directly (Nick Wellnhofer),<br/> Fix cleanup of attributes in XML reader (Nick Wellnhofer),<br/> Fix double free in XML reader with XIncludes (Nick Wellnhofer),<br/> Fix memory leak in xmlXIncludeAddNode error paths (Nick Wellnhofer),<br/> Revert "Fix quadratic runtime in xi:fallback processing" (Nick Wellnhofer),<br/> Fix error reporting with xi:fallback (Nick Wellnhofer),<br/> Fix quadratic runtime in xi:fallback processing (Nick Wellnhofer),<br/> Fix corner case with empty xi:fallback (Nick Wellnhofer),<br/> Fix XInclude regression introduced with recent commit (Nick Wellnhofer),<br/> Fix memory leak in runtest.c (Nick Wellnhofer),<br/> Make "xmllint --push --recovery" work (Nick Wellnhofer),<br/> Revert "Do not URI escape in server side includes" (Nick Wellnhofer),<br/> Fix column number accounting in xmlParse*NameAndCompare (Nick Wellnhofer),<br/> Stop counting nbChars in parser context (Nick Wellnhofer),<br/> Fix out-of-bounds read with 'xmllint --htmlout' (Nick Wellnhofer),<br/> Fix exponential runtime and memory in xi:fallback processing (Nick Wellnhofer),<br/> Don't process siblings of root in xmlXIncludeProcess (Nick Wellnhofer),<br/> Don't recurse into xi:include children in xmlXIncludeDoProcess (Nick Wellnhofer),<br/> Fix memory leak in xmlXIncludeIncludeNode error paths (Nick Wellnhofer),<br/> Check for custom free function in global destructor (Nick Wellnhofer),<br/> Fix integer overflow when comparing schema dates (Nick Wellnhofer),<br/> Fix exponential runtime in xmlFARecurseDeterminism (Nick Wellnhofer),<br/> Don't try to handle namespaces when building HTML documents (Nick Wellnhofer),<br/> Fix several quadratic runtime issues in HTML push parser (Nick Wellnhofer),<br/> Fix quadratic runtime when push parsing HTML start tags (Nick Wellnhofer),<br/> Reset XML parser input before reporting errors (David Kilzer),<br/> Fix quadratic runtime when push parsing HTML entity refs (Nick Wellnhofer),<br/> Fix HTML push parser lookahead (Nick Wellnhofer),<br/> Make htmlCurrentChar always translate U+0000 (Nick Wellnhofer),<br/> Fix UTF-8 decoder in HTML parser (Nick Wellnhofer),<br/> Fix quadratic runtime when parsing HTML script content (Nick Wellnhofer),<br/> Reset HTML parser input before reporting error (Nick Wellnhofer),<br/> Fix more quadratic runtime issues in HTML push parser (Nick Wellnhofer),<br/> Fix regression introduced with 477c7f6a (Nick Wellnhofer),<br/> Fix quadratic runtime in HTML parser (Nick Wellnhofer),<br/> Reset HTML parser input before reporting encoding error (Nick Wellnhofer),<br/> Fix integer overflow in xmlFAParseQuantExact (Nick Wellnhofer),<br/> Fix return value of xmlC14NDocDumpMemory (Nick Wellnhofer),<br/> Don't follow next pointer on documents in xmlXPathRunStreamEval (Nick Wellnhofer),<br/> Fix integer overflow in _xmlSchemaParseGYear (Nick Wellnhofer),<br/> Fix integer overflow when parsing {min,max}Occurs (Nick Wellnhofer),<br/> Fix another memory leak in xmlSchemaValAtomicType (Nick Wellnhofer),<br/> Fix unsigned integer overflow in htmlParseTryOrFinish (Nick Wellnhofer),<br/> Fix integer overflow in htmlParseCharRef (Nick Wellnhofer),<br/> Fix undefined behavior in UTF16LEToUTF8 (Nick Wellnhofer),<br/> Fix return value of xmlCharEncOutput (Nick Wellnhofer),<br/> Never expand parameter entities in text declaration (Nick Wellnhofer),<br/> Fix undefined behavior in xmlXPathTryStreamCompile (Nick Wellnhofer),<br/> Fix use-after-free with validating reader (Nick Wellnhofer),<br/> xmlParseBalancedChunkMemory must not be called with NULL doc (Nick Wellnhofer),<br/> Revert "Fix memory leak in xmlParseBalancedChunkMemoryRecover" (Nick Wellnhofer),<br/> Fix memory leak in xmlXIncludeLoadDoc error path (Nick Wellnhofer),<br/> Make schema validation fail with multiple top-level elements (Nick Wellnhofer),<br/> Call xmlCleanupParser on ELF destruction (Samuel Thibault),<br/> Fix copying of entities in xmlParseReference (Nick Wellnhofer),<br/> Fix memory leak in xmlSchemaValidateStream (Zhipeng Xie),<br/> Fix xmlSchemaGetCanonValue formatting for date and dateTime (Kevin Puetz),<br/> Fix memory leak when shared libxml.dll is unloaded (Kevin Puetz),<br/> Fix potentially-uninitialized critical section in Win32 DLL builds (Kevin Puetz),<br/> Fix integer overflow in xmlBufferResize (Nick Wellnhofer),<br/> Check for overflow when allocating two-dimensional arrays (Nick Wellnhofer),<br/> Remove useless comparisons (Nick Wellnhofer),<br/> Fix overflow check in xmlNodeDump (Nick Wellnhofer),<br/> Fix infinite loop in xmlStringLenDecodeEntities (Zhipeng Xie),<br/> Fix freeing of nested documents (Nick Wellnhofer),<br/> Fix more memory leaks in error paths of XPath parser (Nick Wellnhofer),<br/> Fix memory leaks of encoding handlers in xmlsave.c (Nick Wellnhofer),<br/> Fix xml2-config error code (Nick Wellnhofer),<br/> Fix memory leak in error path of XPath expr parser (Nick Wellnhofer),<br/> Fix overflow handling in xmlBufBackToBuffer (Nick Wellnhofer),<br/> Null pointer handling in catalog.c (raniervf),<br/> xml2-config.in: fix regressions introduced by commit 2f2bf4b2c (Dmitry V. Levin)<br/> </li> <li>Improvements:<br/> Store per-element parser state in a struct (Nick Wellnhofer),<br/> update for xsd:language type check (PaulHiggs),<br/> Update INSTALL.libxml2 (Nick Wellnhofer),<br/> Fix include order in c14n.h (Nick Wellnhofer),<br/> Fix duplicate xmlStrEqual calls in htmlParseEndTag (Nick Wellnhofer),<br/> Speed up htmlCheckAutoClose (Nick Wellnhofer),<br/> Speed up htmlTagLookup (Nick Wellnhofer),<br/> Stop checking attributes for UTF-8 validity (Nick Wellnhofer),<br/> Reduce some fuzzer timeouts (Nick Wellnhofer),<br/> Only run a few CI tests unless scheduled (Nick Wellnhofer),<br/> Improve fuzzer stability (Nick Wellnhofer),<br/> Check for feature flags in fuzzer tests (Nick Wellnhofer),<br/> Another attempt at improving fuzzer stability (Nick Wellnhofer),<br/> Revert "Improve HTML fuzzer stability" (Nick Wellnhofer),<br/> Add charset names to fuzzing dictionaries (Nick Wellnhofer),<br/> Improve HTML fuzzer stability (Nick Wellnhofer),<br/> Add CI for MSVC x86 (Markus Rickert),<br/> Add a flag to not output anything when xmllint succeeded (hhb),<br/> Speed up HTML fuzzer (Nick Wellnhofer),<br/> Remove unused encoding parameter of HTML output functions (Nick Wellnhofer),<br/> Handle malloc failures in fuzzing code (Nick Wellnhofer),<br/> add test coverage for incorrectly-closed comments (Mike Dalessio),<br/> Enforce maximum length of fuzz input (Nick Wellnhofer),<br/> Remove temporary members from struct _xmlXPathContext (Nick Wellnhofer),<br/> Build the Python extension with PY_SSIZE_T_CLEAN (Victor Stinner),<br/> Add CI test for Python 3 (Nick Wellnhofer),<br/> Add fuzzing dictionaries to EXTRA_DIST (Nick Wellnhofer),<br/> Add 'fuzz' subdirectory to DIST_SUBDIRS (Nick Wellnhofer),<br/> Allow port numbers up to INT_MAX (Nick Wellnhofer),<br/> Handle dumps of corrupted documents more gracefully (Nick Wellnhofer),<br/> Limit size of free lists in XML reader when fuzzing (Nick Wellnhofer),<br/> Hardcode maximum XPath recursion depth (Nick Wellnhofer),<br/> Pass URL of main entity in XML fuzzer (Nick Wellnhofer),<br/> Consolidate seed corpus generation (Nick Wellnhofer),<br/> Test fuzz targets with dummy driver (Nick Wellnhofer),<br/> Fix regression introduced with commit d88df4b (Nick Wellnhofer),<br/> Fix regression introduced with commit 74dcc10b (Nick Wellnhofer),<br/> Add TODO comment in xinclude.c (Nick Wellnhofer),<br/> Stop using maxParserDepth in xpath.c (Nick Wellnhofer),<br/> Remove dead code in xinclude.c (Nick Wellnhofer),<br/> Don't add formatting newlines to XInclude nodes (Nick Wellnhofer),<br/> Don't use SAX1 if all element handlers are NULL (Nick Wellnhofer),<br/> Remove unneeded progress checks in HTML parser (Nick Wellnhofer),<br/> Use strcmp when fuzzing (Nick Wellnhofer),<br/> Fix XPath fuzzer (Nick Wellnhofer),<br/> Fuzz XInclude engine (Nick Wellnhofer),<br/> Add XPath and XPointer fuzzer (Nick Wellnhofer),<br/> Update fuzzing code (Nick Wellnhofer),<br/> More *NodeDumpOutput fixes (Nick Wellnhofer),<br/> Fix *NodeDumpOutput functions (Nick Wellnhofer),<br/> Make xmlNodeDumpOutputInternal non-recursive (Nick Wellnhofer),<br/> Make xhtmlNodeDumpOutput non-recursive (Nick Wellnhofer),<br/> Make htmlNodeDumpFormatOutput non-recursive (Nick Wellnhofer),<br/> Fix .gitattributes (Nick Wellnhofer),<br/> Rework control flow in htmlCurrentChar (Nick Wellnhofer),<br/> Make 'xmllint --html --push -' read from stdin (Nick Wellnhofer),<br/> Remove misleading comments in xpath.c (Nick Wellnhofer),<br/> Update to Devhelp index file format version 2 (Andre Klapper),<br/> Set project language to C (Markus Rickert),<br/> Add variable for working directory of XML Conformance Test Suite (Markus Rickert),<br/> Add additional tests and XML Conformance Test Suite (Markus Rickert),<br/> Add command line option for temp directory in runtest (Markus Rickert),<br/> Ensure LF line endings for test files (Markus Rickert),<br/> Enable runtests and testThreads (Markus Rickert),<br/> Limit regexp nesting depth (Nick Wellnhofer),<br/> Fix return values and documentation in encoding.c (Nick Wellnhofer),<br/> Add regexp regression tests (David Kilzer),<br/> Report error for invalid regexp quantifiers (Nick Wellnhofer),<br/> Fix rebuildin