possible mem leak patch from Jason Adams integrated xf:escape-uri() from

* xpath.c: possible mem leak patch from Jason Adams
* xpath.c: integrated xf:escape-uri() from Wesley Terpstra
  in the XQuery namespace
* configure.in: preparing 2.4.24
* doc/*.html: updated the web pages
* python/generator.py: closing bug #85258 by generating conditional
  compile check to avoid linking to routines not configured in.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 63522e3..3edfd3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+	* xpath.c: possible mem leak patch from Jason Adams
+
+Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+	* xpath.c: integrated xf:escape-uri() from Wesley Terpstra
+	  in the XQuery namespace
+	* configure.in: preparing 2.4.24
+	* doc/*.html: updated the web pages
+
+Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+	* python/generator.py: closing bug #85258 by generating conditional
+	  compile check to avoid linking to routines not configured in.
+
 2002-08-22  Havoc Pennington  <hp@pobox.com>
 
 	* autogen.sh: update error message for missing automake
diff --git a/configure.in b/configure.in
index 0c5ddb9..55e395d 100644
--- a/configure.in
+++ b/configure.in
@@ -6,7 +6,7 @@
 
 LIBXML_MAJOR_VERSION=2
 LIBXML_MINOR_VERSION=4
-LIBXML_MICRO_VERSION=23
+LIBXML_MICRO_VERSION=24
 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION
 LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION
 
diff --git a/doc/FAQ.html b/doc/FAQ.html
index 1213039..f235429 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -105,9 +105,9 @@
   </li>
   <li>
 <em>Can I embed libxml 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
+    <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>
@@ -128,8 +128,8 @@
   <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 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>
@@ -145,8 +145,8 @@
   <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://rpmfind.net/pub/libxml/">rpmfind.net</a> provide
+    library for libxml.so.0, you can probably safely remove it. The libxml
+    packages provided on <a href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> provide
     libxml.so.0</p>
   </li>
   <li>
@@ -156,9 +156,9 @@
     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
+    <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>
@@ -197,17 +197,18 @@
 </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 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 CVS 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>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>
@@ -293,8 +294,8 @@
     patches.</p>
   </li>
   <li>
-<em>Where can I get more examples and information than privoded on the web
-    page?</em>
+<em>Where can I get more examples and information than privoded on the
+    web page?</em>
     <p>Ideally a libxml book would be nice. I have no such plan ... But you
     can:</p>
     <ul>
@@ -311,9 +312,9 @@
       <li>
 <a href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Browse
         the libxml 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
-        xmllint.c and of the various testXXX.c test programs should provide
-        good examples of how to do things with the library.</li>
+        as possible, so looking at it may be helpful. In particular the code
+        of xmllint.c and of the various testXXX.c test programs should
+        provide good examples of how to do things with the library.</li>
     </ul>
 </li>
   <li>What about C++ ?
@@ -336,8 +337,8 @@
 </li>
   <li>How to validate a document a posteriori ?
     <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>
+    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 */
diff --git a/doc/XMLinfo.html b/doc/XMLinfo.html
index 4a327b9..b52a775 100644
--- a/doc/XMLinfo.html
+++ b/doc/XMLinfo.html
@@ -104,18 +104,19 @@
   &lt;/chapter&gt;
 &lt;/EXAMPLE&gt;</pre>
 <p>The first line specifies that it is an XML document and gives useful
-information about its encoding.  Then the rest of the document is a text format whose
-structure is specified by tags between brackets. <strong>Each tag opened has
-to be closed</strong>. XML is pedantic about this. However, if a tag is empty
-(no content), a single tag can serve as both the opening and closing tag if
-it ends with <code>/&gt;</code> rather than with <code>&gt;</code>. Note
-that, for example, the image tag has no content (just an attribute) and is
-closed by ending the tag with <code>/&gt;</code>.</p>
-<p>XML can be applied successfully to a wide range of tasks, ranging from long term
-structured document maintenance (where it follows the steps of SGML) to
-simple data encoding mechanisms like configuration file formatting (glade),
-spreadsheets (gnumeric), or even shorter lived documents such as WebDAV where
-it is used to encode remote calls between a client and a server.</p>
+information about its encoding.  Then the rest of the document is a text
+format whose structure is specified by tags between brackets. <strong>Each
+tag opened has to be closed</strong>. XML is pedantic about this. However, if
+a tag is empty (no content), a single tag can serve as both the opening and
+closing tag if it ends with <code>/&gt;</code> rather than with
+<code>&gt;</code>. Note that, for example, the image tag has no content (just
+an attribute) and is closed by ending the tag with <code>/&gt;</code>.</p>
+<p>XML can be applied successfully to a wide range of tasks, ranging from
+long term structured document maintenance (where it follows the steps of
+SGML) to simple data encoding mechanisms like configuration file formatting
+(glade), spreadsheets (gnumeric), or even shorter lived documents such as
+WebDAV where it is used to encode remote calls between a client and a
+server.</p>
 <p><a href="bugs.html">Daniel Veillard</a></p>
 </td></tr></table></td></tr></table></td></tr></table></td>
 </tr></table></td></tr></table>
diff --git a/doc/XSLT.html b/doc/XSLT.html
index a992816..f5842ad 100644
--- a/doc/XSLT.html
+++ b/doc/XSLT.html
@@ -93,8 +93,8 @@
 <a href="http://www.w3.org/TR/xslt">XSL Transformations</a>,  is a
 language for transforming XML documents into other XML documents (or
 HTML/textual output).</p>
-<p>A separate library called libxslt is being developed on top of libxml2. This
-module &quot;libxslt&quot; too can be found in the Gnome CVS base.</p>
+<p>A separate library called libxslt is being developed on top of libxml2.
+This module &quot;libxslt&quot; too can be found in the Gnome CVS base.</p>
 <p>You can check the <a href="http://cvs.gnome.org/lxr/source/libxslt/FEATURES">features</a>
 supported and the progresses on the <a href="http://cvs.gnome.org/lxr/source/libxslt/ChangeLog" name="Changelog">Changelog</a>.</p>
 <p><a href="bugs.html">Daniel Veillard</a></p>
diff --git a/doc/bugs.html b/doc/bugs.html
index 9f09957..de8ba50 100644
--- a/doc/bugs.html
+++ b/doc/bugs.html
@@ -90,9 +90,9 @@
 <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="http://bugzilla.gnome.org/buglist.cgi?product=libxml">Gnome
-bug tracking database</a> (make sure to use the &quot;libxml2&quot; 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>
+bug tracking database</a> (make sure to use the &quot;libxml2&quot; 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>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>
diff --git a/doc/docs.html b/doc/docs.html
index 58e2c81..e33042f 100644
--- a/doc/docs.html
+++ b/doc/docs.html
@@ -106,9 +106,9 @@
     for IBM developerWorks</a> about using libxml.</li>
   <li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">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>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>
 <p><a href="bugs.html">Daniel Veillard</a></p>
diff --git a/doc/downloads.html b/doc/downloads.html
index d9d3c4f..4fd7396 100644
--- a/doc/downloads.html
+++ b/doc/downloads.html
@@ -96,7 +96,9 @@
 maintainer of the Windows port, <a href="http://www.fh-frankfurt.de/~igor/projects/libxml/index.html">he
 provides binaries</a>. <a href="mailto:Gary.Pennington@sun.com">Gary
 Pennington</a> provides <a href="http://garypennington.net/libxml2/">Solaris
-binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X binaries</a>.</p>
+binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides
+<a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X
+binaries</a>.</p>
 <p><a name="Snapshot">Snapshot:</a></p>
 <ul>
 <li>Code from the W3C cvs base libxml <a href="ftp://xmlsoft.org/cvs-snapshot.tar.gz">cvs-snapshot.tar.gz</a>.</li>
diff --git a/doc/help.html b/doc/help.html
index b2f6ffb..a542b43 100644
--- a/doc/help.html
+++ b/doc/help.html
@@ -97,7 +97,8 @@
   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>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
diff --git a/doc/index.html b/doc/index.html
index f2d131a..d968c47 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -126,7 +126,8 @@
 </li>
 </ul>
 <p>In most cases libxml tries to implement the specifications in a relatively
-strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
+strictly compliant way. As of release 2.4.16, libxml2 passes 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>
diff --git a/doc/news.html b/doc/news.html
index 259190f..ba51d3e 100644
--- a/doc/news.html
+++ b/doc/news.html
@@ -96,6 +96,17 @@
     Schemas</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a>
 </li>
 </ul>
+<p><strong>2.4.24: Aug 22 2002</strong></p>
+<ul>
+<li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
+  <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
+    (fcrozat)</li>
+  <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
+  <li>C14N improvements by Aleksey</li>
+  <li>doc cleanups: Rick Jones </li>
+  <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
+  <li>XInclude: implementation of fallback and xml:base fixup added</li>
+</ul>
 <h3>2.4.23: July 6 2002</h3>
 <ul>
 <li>performances patches: Peter Jacobi</li>
diff --git a/doc/python.html b/doc/python.html
index 8507d84..ac1f57b 100644
--- a/doc/python.html
+++ b/doc/python.html
@@ -87,8 +87,8 @@
 </table>
 </td></tr></table></td>
 <td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd">
-<p>There are a number of language bindings and wrappers available for libxml2,
-the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
+<p>There are a number of language bindings and wrappers available for
+libxml2, the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
 (<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
 order to get updates to this list or to discuss the specific topic of libxml2
 or libxslt wrappers or bindings:</p>
diff --git a/doc/xml.html b/doc/xml.html
index b80a56a..d87962d 100644
--- a/doc/xml.html
+++ b/doc/xml.html
@@ -58,7 +58,8 @@
 </ul>
 
 <p>In most cases libxml tries to implement the specifications in a relatively
-strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the <a
+strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests
+from the <a
 href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
 Suite</a>.</p>
 
@@ -159,9 +160,9 @@
     wording</p>
   </li>
   <li><em>Can I embed libxml 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
+    <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>
@@ -182,8 +183,8 @@
   </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 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
@@ -202,8 +203,8 @@
   </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
+    library for libxml.so.0, you can probably safely remove it. The libxml
+    packages provided on <a
     href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> provide
     libxml.so.0</p>
   </li>
@@ -212,9 +213,9 @@
     <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
+    <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>
@@ -253,16 +254,17 @@
     </ul>
   </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 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 CVS 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>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>
@@ -345,8 +347,8 @@
     <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 privoded on the web
-    page?</em>
+  <li><em>Where can I get more examples and information than privoded on the
+    web page?</em>
     <p>Ideally a libxml book would be nice. I have no such plan ... But you
     can:</p>
     <ul>
@@ -363,9 +365,9 @@
       <li><a
         href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Browse
         the libxml 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
-        xmllint.c and of the various testXXX.c test programs should provide
-        good examples of how to do things with the library.</li>
+        as possible, so looking at it may be helpful. In particular the code
+        of xmllint.c and of the various testXXX.c test programs should
+        provide good examples of how to do things with the library.</li>
     </ul>
   </li>
   <li>What about C++ ?
@@ -388,8 +390,8 @@
   </li>
   <li>How to validate a document a posteriori ?
     <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
+    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>
@@ -430,9 +432,9 @@
     for IBM developerWorks</a> about using libxml.</li>
   <li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">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>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>
@@ -442,9 +444,9 @@
 <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="http://bugzilla.gnome.org/buglist.cgi?product=libxml">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>
+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>There is also a mailing-list <a
 href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an  <a
@@ -502,7 +504,8 @@
   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>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
@@ -531,7 +534,9 @@
 href="http://www.fh-frankfurt.de/~igor/projects/libxml/index.html">he
 provides binaries</a>. <a href="mailto:Gary.Pennington@sun.com">Gary
 Pennington</a> provides <a href="http://garypennington.net/libxml2/">Solaris
-binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X binaries</a>.</p>
+binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides
+<a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X
+binaries</a>.</p>
 
 <p><a name="Snapshot">Snapshot:</a></p>
 <ul>
@@ -572,6 +577,18 @@
     Schemas</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a></li>
 </ul>
 
+<p><strong>2.4.24: Aug 22 2002</strong></p>
+<ul>
+  <li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
+  <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
+    (fcrozat)</li>
+  <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
+  <li>C14N improvements by Aleksey</li>
+  <li>doc cleanups: Rick Jones </li>
+  <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
+  <li>XInclude: implementation of fallback and xml:base fixup added</li>
+</ul>
+
 <h3>2.4.23: July 6 2002</h3>
 <ul>
   <li>performances patches: Peter Jacobi</li>
@@ -1370,19 +1387,20 @@
 &lt;/EXAMPLE&gt;</pre>
 
 <p>The first line specifies that it is an XML document and gives useful
-information about its encoding.  Then the rest of the document is a text format whose
-structure is specified by tags between brackets. <strong>Each tag opened has
-to be closed</strong>. XML is pedantic about this. However, if a tag is empty
-(no content), a single tag can serve as both the opening and closing tag if
-it ends with <code>/&gt;</code> rather than with <code>&gt;</code>. Note
-that, for example, the image tag has no content (just an attribute) and is
-closed by ending the tag with <code>/&gt;</code>.</p>
+information about its encoding.  Then the rest of the document is a text
+format whose structure is specified by tags between brackets. <strong>Each
+tag opened has to be closed</strong>. XML is pedantic about this. However, if
+a tag is empty (no content), a single tag can serve as both the opening and
+closing tag if it ends with <code>/&gt;</code> rather than with
+<code>&gt;</code>. Note that, for example, the image tag has no content (just
+an attribute) and is closed by ending the tag with <code>/&gt;</code>.</p>
 
-<p>XML can be applied successfully to a wide range of tasks, ranging from long term
-structured document maintenance (where it follows the steps of SGML) to
-simple data encoding mechanisms like configuration file formatting (glade),
-spreadsheets (gnumeric), or even shorter lived documents such as WebDAV where
-it is used to encode remote calls between a client and a server.</p>
+<p>XML can be applied successfully to a wide range of tasks, ranging from
+long term structured document maintenance (where it follows the steps of
+SGML) to simple data encoding mechanisms like configuration file formatting
+(glade), spreadsheets (gnumeric), or even shorter lived documents such as
+WebDAV where it is used to encode remote calls between a client and a
+server.</p>
 
 <h2><a name="XSLT">XSLT</a></h2>
 
@@ -1392,8 +1410,8 @@
 language for transforming XML documents into other XML documents (or
 HTML/textual output).</p>
 
-<p>A separate library called libxslt is being developed on top of libxml2. This
-module "libxslt" too can be found in the Gnome CVS base.</p>
+<p>A separate library called libxslt is being developed on top of libxml2.
+This module "libxslt" too can be found in the Gnome CVS base.</p>
 
 <p>You can check the <a
 href="http://cvs.gnome.org/lxr/source/libxslt/FEATURES">features</a>
@@ -1403,8 +1421,8 @@
 
 <h2><a name="Python">Python and bindings</a></h2>
 
-<p>There are a number of language bindings and wrappers available for libxml2,
-the list below is not exhaustive. Please contact the <a
+<p>There are a number of language bindings and wrappers available for
+libxml2, the list below is not exhaustive. Please contact the <a
 href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
 (<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
 order to get updates to this list or to discuss the specific topic of libxml2
@@ -1897,8 +1915,8 @@
 found within your document, what is the formal shape of your document tree
 (by defining the allowed content of an element; either text, a regular
 expression for the allowed list of children, or mixed content i.e. both text
-and children). The DTD also defines the valid attributes for all elements
-and the types of those attributes.</p>
+and children). The DTD also defines the valid attributes for all elements and
+the types of those attributes.</p>
 
 <h3><a name="definition1">The definition</a></h3>
 
@@ -1917,10 +1935,10 @@
 
 <h3><a name="Simple1">Simple rules</a></h3>
 
-<p>Writing DTDs can be done in many ways. The rules to build them if you
-need something permanent or something which can evolve over time can be radically
-different. Really complex DTDs like DocBook ones are flexible but quite harder
-to design. I will just focus on DTDs for a formats with a fixed simple
+<p>Writing DTDs can be done in many ways. The rules to build them if you need
+something permanent or something which can evolve over time can be radically
+different. Really complex DTDs like DocBook ones are flexible but quite
+harder to design. I will just focus on DTDs for a formats with a fixed simple
 structure. It is just a set of basic rules, and definitely not exhaustive nor
 usable for complex DTD design.</p>
 
@@ -2027,9 +2045,9 @@
 <h3><a name="Some1">Some examples</a></h3>
 
 <p>The directory <code>test/valid/dtds/</code> in the libxml distribution
-contains some complex DTD examples. The example in the file <code>test/valid/dia.xml</code>
-shows an XML file where the simple DTD is directly included within
-the document.</p>
+contains some complex DTD examples. The example in the file
+<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
+directly included within the document.</p>
 
 <h3><a name="validate1">How to validate</a></h3>
 
@@ -2042,8 +2060,8 @@
 
 <p>the -- noout is used to disable output of the resulting tree.</p>
 
-<p>The <code>--dtdvalid dtd</code> allows validation of the document(s) against
-a given DTD.</p>
+<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
+against a given DTD.</p>
 
 <p>Libxml exports an API to handle DTDs and validation, check the <a
 href="http://xmlsoft.org/html/libxml-valid.html">associated
@@ -2644,6 +2662,7 @@
 
 
 
+
 } </pre>
   </li>
   <li>And then use it to save the document:
diff --git a/doc/xmldtd.html b/doc/xmldtd.html
index de4f48a..d266b8a 100644
--- a/doc/xmldtd.html
+++ b/doc/xmldtd.html
@@ -116,8 +116,8 @@
 found within your document, what is the formal shape of your document tree
 (by defining the allowed content of an element; either text, a regular
 expression for the allowed list of children, or mixed content i.e. both text
-and children). The DTD also defines the valid attributes for all elements
-and the types of those attributes.</p>
+and children). The DTD also defines the valid attributes for all elements and
+the types of those attributes.</p>
 <h3><a name="definition1">The definition</a></h3>
 <p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
 Rev1</a>):</p>
@@ -130,10 +130,10 @@
 <p>(unfortunately) all this is inherited from the SGML world, the syntax is
 ancient...</p>
 <h3><a name="Simple1">Simple rules</a></h3>
-<p>Writing DTDs can be done in many ways. The rules to build them if you
-need something permanent or something which can evolve over time can be radically
-different. Really complex DTDs like DocBook ones are flexible but quite harder
-to design. I will just focus on DTDs for a formats with a fixed simple
+<p>Writing DTDs can be done in many ways. The rules to build them if you need
+something permanent or something which can evolve over time can be radically
+different. Really complex DTDs like DocBook ones are flexible but quite
+harder to design. I will just focus on DTDs for a formats with a fixed simple
 structure. It is just a set of basic rules, and definitely not exhaustive nor
 usable for complex DTD design.</p>
 <h4>
@@ -218,9 +218,9 @@
 </ul>
 <h3><a name="Some1">Some examples</a></h3>
 <p>The directory <code>test/valid/dtds/</code> in the libxml distribution
-contains some complex DTD examples. The example in the file <code>test/valid/dia.xml</code>
-shows an XML file where the simple DTD is directly included within
-the document.</p>
+contains some complex DTD examples. The example in the file
+<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
+directly included within the document.</p>
 <h3><a name="validate1">How to validate</a></h3>
 <p>The simplest way is to use the xmllint program included with libxml. The
 <code>--valid</code> option turns-on validation of the files given as input.
@@ -228,8 +228,8 @@
 1.0 specification:</p>
 <p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p>
 <p>the -- noout is used to disable output of the resulting tree.</p>
-<p>The <code>--dtdvalid dtd</code> allows validation of the document(s) against
-a given DTD.</p>
+<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
+against a given DTD.</p>
 <p>Libxml exports an API to handle DTDs and validation, check the <a href="http://xmlsoft.org/html/libxml-valid.html">associated
 description</a>.</p>
 <h3><a name="Other1">Other resources</a></h3>
diff --git a/doc/xmlio.html b/doc/xmlio.html
index cf218d9..e650161 100644
--- a/doc/xmlio.html
+++ b/doc/xmlio.html
@@ -238,6 +238,7 @@
 
 
 
+
 } </pre>
   </li>
   <li>And then use it to save the document:
diff --git a/include/libxml/xmlwin32version.h b/include/libxml/xmlwin32version.h
index b59b2f6..937a9f0 100644
--- a/include/libxml/xmlwin32version.h
+++ b/include/libxml/xmlwin32version.h
@@ -27,21 +27,21 @@
  *
  * the version string like "1.2.3"
  */
-#define LIBXML_DOTTED_VERSION "2.4.23"
+#define LIBXML_DOTTED_VERSION "2.4.24"
 
 /**
  * LIBXML_VERSION:
  *
  * the version number: 1.2.3 value is 1002003
  */
-#define LIBXML_VERSION 20423
+#define LIBXML_VERSION 20424
 
 /**
  * LIBXML_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "1002003"
  */
-#define LIBXML_VERSION_STRING "20423"
+#define LIBXML_VERSION_STRING "20424"
 
 /**
  * LIBXML_TEST_VERSION:
@@ -49,7 +49,7 @@
  * Macro to check that the libxml version in use is compatible with
  * the version the software has been compiled against
  */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20423);
+#define LIBXML_TEST_VERSION xmlCheckVersion(20424);
 
 #if 0
 /**
diff --git a/parser.c b/parser.c
index 389c399..a68b3b9 100644
--- a/parser.c
+++ b/parser.c
@@ -9794,7 +9794,7 @@
     if (doc == NULL) {
 	ctxt->myDoc = newDoc;
     } else {
-	ctxt->myDoc = doc;
+	ctxt->myDoc = newDoc;
 	newDoc->children->doc = doc;
     }
     ctxt->instate = XML_PARSER_CONTENT;
diff --git a/python/generator.py b/python/generator.py
index 5533f34..c34949e 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -383,6 +383,31 @@
             unknown_types[ret[0]] = [name]
         return -1
 
+    if file == "debugXML":
+        include.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+        export.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+        output.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+    elif file == "HTMLtree" or file == "HTMLparser":
+        include.write("#ifdef LIBXML_HTML_ENABLED\n");
+        export.write("#ifdef LIBXML_HTML_ENABLED\n");
+        output.write("#ifdef LIBXML_HTML_ENABLED\n");
+    elif file == "c14n":
+        include.write("#ifdef LIBXML_C14N_ENABLED\n");
+        export.write("#ifdef LIBXML_C14N_ENABLED\n");
+        output.write("#ifdef LIBXML_C14N_ENABLED\n");
+    elif file == "xpathInternals" or file == "xpath":
+        include.write("#ifdef LIBXML_XPATH_ENABLED\n");
+        export.write("#ifdef LIBXML_XPATH_ENABLED\n");
+        output.write("#ifdef LIBXML_XPATH_ENABLED\n");
+    elif file == "xpointer":
+        include.write("#ifdef LIBXML_XPTR_ENABLED\n");
+        export.write("#ifdef LIBXML_XPTR_ENABLED\n");
+        output.write("#ifdef LIBXML_XPTR_ENABLED\n");
+    elif file == "xinclude":
+        include.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+        export.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+        output.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+
     include.write("PyObject * ")
     include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name));
 
@@ -417,6 +442,30 @@
     output.write(c_call)
     output.write(ret_convert)
     output.write("}\n\n")
+    if file == "debugXML":
+        include.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+        export.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+        output.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+    elif file == "HTMLtree" or file == "HTMLparser":
+        include.write("#endif /* LIBXML_HTML_ENABLED */\n");
+        export.write("#endif /* LIBXML_HTML_ENABLED */\n");
+        output.write("#endif /* LIBXML_HTML_ENABLED */\n");
+    elif file == "c14n":
+        include.write("#endif /* LIBXML_C14N_ENABLED */\n");
+        export.write("#endif /* LIBXML_C14N_ENABLED */\n");
+        output.write("#endif /* LIBXML_C14N_ENABLED */\n");
+    elif file == "xpathInternals" or file == "xpath":
+        include.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+        export.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+        output.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+    elif file == "xpointer":
+        include.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+        export.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+        output.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+    elif file == "xinclude":
+        include.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
+        export.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
+        output.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
     return 1
 
 def buildStubs():
diff --git a/testSchemas.c b/testSchemas.c
index 40c0c8b..a22c429 100644
--- a/testSchemas.c
+++ b/testSchemas.c
@@ -49,9 +49,11 @@
     xmlSchemaPtr schema = NULL;
 
     for (i = 1; i < argc ; i++) {
+#ifdef LIBXML_DEBUG_ENABLED
 	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
 	    debug++;
 	else
+#endif
 	if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
 	    noout++;
         }
@@ -69,8 +71,10 @@
 			stderr);
 		schema = xmlSchemaParse(ctxt);
 		xmlSchemaFreeParserCtxt(ctxt);
+#ifdef LIBXML_DEBUG_ENABLED
 		if (debug)
 		    xmlSchemaDump(stdout, schema);
+#endif
 	    } else {
 		xmlDocPtr doc;
 
@@ -109,7 +113,9 @@
 	printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
 	       argv[0]);
 	printf("\tParse the HTML files and output the result of the parsing\n");
+#ifdef LIBXML_DEBUG_ENABLED
 	printf("\t--debug : dump a debug tree of the in-memory document\n");
+#endif
 	printf("\t--noout : do not print the result\n");
     }
     xmlSchemaCleanupTypes();
diff --git a/xpath.c b/xpath.c
index b176ed5..333d200 100644
--- a/xpath.c
+++ b/xpath.c
@@ -2825,7 +2825,7 @@
 	ctxt->nsHash = xmlHashCreate(10);
     if (ctxt->nsHash == NULL)
 	return(-1);
-    return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) ns_uri,
+    return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) xmlStrdup(ns_uri),
 			      (xmlHashDeallocator)xmlFree));
 }
 
@@ -2875,7 +2875,7 @@
     if (ctxt == NULL)
 	return;
 
-    xmlHashFree(ctxt->nsHash, NULL);
+    xmlHashFree(ctxt->nsHash, (xmlHashDeallocator)xmlFree);
     ctxt->nsHash = NULL;
 }
 
@@ -10773,6 +10773,119 @@
     return(res);
 }
 
+/************************************************************************
+ *									*
+ *	Extra functions not pertaining to the XPath spec		*
+ *									*
+ ************************************************************************/
+/**
+ * xmlXPathEscapeUriFunction:
+ * @ctxt:  the XPath Parser context
+ * @nargs:  the number of arguments
+ *
+ * Implement the escape-uri() XPath function
+ *    string escape-uri(string $str, bool $escape-reserved)
+ *
+ * This function applies the URI escaping rules defined in section 2 of [RFC
+ * 2396] to the string supplied as $uri-part, which typically represents all
+ * or part of a URI. The effect of the function is to replace any special
+ * character in the string by an escape sequence of the form %xx%yy...,
+ * where xxyy... is the hexadecimal representation of the octets used to
+ * represent the character in UTF-8.
+ *
+ * The set of characters that are escaped depends on the setting of the
+ * boolean argument $escape-reserved.
+ *
+ * If $escape-reserved is true, all characters are escaped other than lower
+ * case letters a-z, upper case letters A-Z, digits 0-9, and the characters
+ * referred to in [RFC 2396] as "marks": specifically, "-" | "_" | "." | "!"
+ * | "~" | "*" | "'" | "(" | ")". The "%" character itself is escaped only
+ * if it is not followed by two hexadecimal digits (that is, 0-9, a-f, and
+ * A-F).
+ *
+ * If $escape-reserved is false, the behavior differs in that characters
+ * referred to in [RFC 2396] as reserved characters are not escaped. These
+ * characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",".
+ * 
+ * [RFC 2396] does not define whether escaped URIs should use lower case or
+ * upper case for hexadecimal digits. To ensure that escaped URIs can be
+ * compared using string comparison functions, this function must always use
+ * the upper-case letters A-F.
+ * 
+ * Generally, $escape-reserved should be set to true when escaping a string
+ * that is to form a single part of a URI, and to false when escaping an
+ * entire URI or URI reference.
+ * 
+ * In the case of non-ascii characters, the string is encoded according to 
+ * utf-8 and then converted according to RFC 2396.
+ *
+ * Examples
+ *  xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true()) 
+ *  returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean"
+ *  xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false())
+ *  returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean"
+ *
+ */
+void
+xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+    xmlXPathObjectPtr str;
+    int escape_reserved;
+    xmlBufferPtr target;
+    xmlChar *cptr;
+    xmlChar escape[4];
+    
+    CHECK_ARITY(2);
+    
+    escape_reserved = xmlXPathPopBoolean(ctxt);
+    
+    CAST_TO_STRING;
+    str = valuePop(ctxt);
+    
+    target = xmlBufferCreate();
+    
+    escape[0] = '%';
+    escape[3] = 0;
+    
+    if (target) {
+	for (cptr = str->stringval; *cptr; cptr++) {
+	    if ((*cptr >= 'A' && *cptr <= 'Z') ||
+		(*cptr >= 'a' && *cptr <= 'z') ||
+		(*cptr >= '0' && *cptr <= '9') ||
+		*cptr == '-' || *cptr == '_' || *cptr == '.' || 
+		*cptr == '!' || *cptr == '~' || *cptr == '*' ||
+		*cptr == '\''|| *cptr == '(' || *cptr == ')' ||
+		(*cptr == '%' && 
+		 ((cptr[1] >= 'A' && cptr[1] <= 'F') ||
+		  (cptr[1] >= 'a' && cptr[1] <= 'f') ||
+		  (cptr[1] >= '0' && cptr[1] <= '9')) &&
+		 ((cptr[2] >= 'A' && cptr[2] <= 'F') ||
+		  (cptr[2] >= 'a' && cptr[2] <= 'f') ||
+		  (cptr[2] >= '0' && cptr[2] <= '9'))) ||
+		(!escape_reserved &&
+		 (*cptr == ';' || *cptr == '/' || *cptr == '?' ||
+		  *cptr == ':' || *cptr == '@' || *cptr == '&' ||
+		  *cptr == '=' || *cptr == '+' || *cptr == '$' ||
+		  *cptr == ','))) {
+		xmlBufferAdd(target, cptr, 1);
+	    } else {
+		if ((*cptr >> 4) < 10)
+		    escape[1] = '0' + (*cptr >> 4);
+		else
+		    escape[1] = 'A' - 10 + (*cptr >> 4);
+		if ((*cptr & 0xF) < 10)
+		    escape[2] = '0' + (*cptr & 0xF);
+		else
+		    escape[2] = 'A' - 10 + (*cptr & 0xF);
+		
+		xmlBufferAdd(target, &escape[0], 3);
+	    }
+	}
+    }
+    valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+    xmlBufferFree(target);
+    xmlXPathFreeObject(str);
+}
+
 /**
  * xmlXPathRegisterAllFunctions:
  * @ctxt:  the XPath context
@@ -10836,6 +10949,10 @@
                          xmlXPathTrueFunction);
     xmlXPathRegisterFunc(ctxt, (const xmlChar *)"translate",
                          xmlXPathTranslateFunction);
+
+    xmlXPathRegisterFuncNS(ctxt, (const xmlChar *)"escape-uri",
+	 (const xmlChar *)"http://www.w3.org/2002/08/xquery-functions",
+                         xmlXPathEscapeUriFunction);
 }
 
 #endif /* LIBXML_XPATH_ENABLED */