Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libxml2 for openSUSE:Factory checked 
in at 2022-05-05 23:05:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libxml2 (Old)
 and      /work/SRC/openSUSE:Factory/.libxml2.new.1538 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libxml2"

Thu May  5 23:05:14 2022 rev:109 rq:974482 version:2.9.14

Changes:
--------
--- /work/SRC/openSUSE:Factory/libxml2/libxml2.changes  2022-03-23 
20:16:02.930383685 +0100
+++ /work/SRC/openSUSE:Factory/.libxml2.new.1538/libxml2.changes        
2022-05-05 23:05:48.465513436 +0200
@@ -1,0 +2,32 @@
+Mon May  2 21:03:25 UTC 2022 - David Anes <david.a...@suse.com>
+
+- Update to 2.9.14:
+  * Security:
+    + [CVE-2022-29824] Integer overflow in xmlBuf and xmlBuffer
+    + Fix potential double-free in xmlXPtrStringRangeFunction
+    + Fix memory leak in xmlFindCharEncodingHandler
+    + Normalize XPath strings in-place
+    + Prevent integer-overflow in htmlSkipBlankChars() and 
+      xmlSkipBlankChars()
+    + Fix leak of xmlElementContent
+
+  * Bug fixes:
+    + Fix parsing of subtracted regex character classes
+    + Fix recursion check in xinclude.c
+    + Reset last error in xmlCleanupGlobals
+    + Fix certain combinations of regex range quantifiers
+    + Fix range quantifier on subregex
+
+  * Improvements:
+    + Fix recovery from invalid HTML start tags
+
+  * Build system, portability:
+    + Define LFS macros before including system headers
+    + Initialize XPath floating-point globals
+    + configure: check for icu DEFS 
+    + configure.ac: produce tar.xz only (GNOME policy)
+    + CMakeLists.txt: Fix LIBXML_VERSION_NUMBER
+    + Fix build with older Python versions
+    + Fix --without-valid build
+
+-------------------------------------------------------------------

Old:
----
  libxml2-2.9.13.tar.xz

New:
----
  libxml2-2.9.14.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libxml2.spec ++++++
--- /var/tmp/diff_new_pack.D2eBdE/_old  2022-05-05 23:05:49.009514115 +0200
+++ /var/tmp/diff_new_pack.D2eBdE/_new  2022-05-05 23:05:49.013514119 +0200
@@ -25,7 +25,7 @@
 %endif
 
 Name:           libxml2%{?dash}%{flavor}
-Version:        2.9.13
+Version:        2.9.14
 Release:        0
 License:        MIT
 Summary:        A Library to Manipulate XML Files

++++++ libxml2-2.9.13.tar.xz -> libxml2-2.9.14.tar.xz ++++++
++++ 1637 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/CMakeLists.txt new/libxml2-2.9.14/CMakeLists.txt
--- old/libxml2-2.9.13/CMakeLists.txt   2022-02-19 17:23:47.000000000 +0100
+++ new/libxml2-2.9.14/CMakeLists.txt   2022-05-02 12:52:45.000000000 +0200
@@ -105,10 +105,13 @@
        endif()
 endforeach()
 
-set(LIBXML_VERSION 
${LIBXML_MAJOR_VERSION}0${LIBXML_MINOR_VERSION}0${LIBXML_MICRO_VERSION})
-set(LIBXML_VERSION_STRING "${LIBXML_VERSION}")
+set(LIBXML_VERSION ${VERSION})
 set(LIBXML_VERSION_EXTRA "")
-set(LIBXML_VERSION_NUMBER ${LIBXML_VERSION})
+math(EXPR LIBXML_VERSION_NUMBER "
+    ${LIBXML_MAJOR_VERSION} * 10000 +
+    ${LIBXML_MINOR_VERSION} * 100 +
+    ${LIBXML_MICRO_VERSION}
+")
 
 set(MODULE_EXTENSION "${CMAKE_SHARED_LIBRARY_SUFFIX}")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/HTMLparser.c new/libxml2-2.9.14/HTMLparser.c
--- old/libxml2-2.9.13/HTMLparser.c     2022-02-12 16:11:04.000000000 +0100
+++ new/libxml2-2.9.14/HTMLparser.c     2022-05-02 12:52:45.000000000 +0200
@@ -614,7 +614,8 @@
            if (*ctxt->input->cur == 0)
                xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
        }
-       res++;
+       if (res < INT_MAX)
+           res++;
     }
     return(res);
 }
@@ -3960,26 +3961,6 @@
        htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
                     "htmlParseStartTag: invalid element name\n",
                     NULL, NULL);
-        /*
-         * The recovery code is disabled for now as it can result in
-         * quadratic behavior with the push parser. htmlParseStartTag
-         * must consume all content up to the final '>' in order to avoid
-         * rescanning for this terminator.
-         *
-         * For a proper fix in line with HTML5, htmlParseStartTag and
-         * htmlParseElement should only be called when there's an ASCII
-         * alpha character following the initial '<'. Otherwise, the '<'
-         * should be emitted as text (unless followed by '!', '/' or '?').
-         */
-#if 0
-       /* if recover preserve text on classic misconstructs */
-       if ((ctxt->recovery) && ((IS_BLANK_CH(CUR)) || (CUR == '<') ||
-           (CUR == '=') || (CUR == '>') || (((CUR >= '0') && (CUR <= '9'))))) {
-           htmlParseCharDataInternal(ctxt, '<');
-           return(-1);
-       }
-#endif
-
        /* Dump the bogus tag like browsers do */
        while ((CUR != 0) && (CUR != '>') &&
                (ctxt->instate != XML_PARSER_EOF))
@@ -4432,9 +4413,15 @@
            /*
             * Third case :  a sub-element.
             */
-           else if (CUR == '<') {
+           else if ((CUR == '<') && IS_ASCII_LETTER(NXT(1))) {
                htmlParseElement(ctxt);
            }
+           else if (CUR == '<') {
+                if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+                    (ctxt->sax->characters != NULL))
+                    ctxt->sax->characters(ctxt->userData, BAD_CAST "<", 1);
+                NEXT;
+           }
 
            /*
             * Fourth case : a reference. If if has not been resolved,
@@ -4831,13 +4818,19 @@
            /*
             * Third case :  a sub-element.
             */
-           else if (CUR == '<') {
+           else if ((CUR == '<') && IS_ASCII_LETTER(NXT(1))) {
                htmlParseElementInternal(ctxt);
                if (currentNode != NULL) xmlFree(currentNode);
 
                currentNode = xmlStrdup(ctxt->name);
                depth = ctxt->nameNr;
            }
+           else if (CUR == '<') {
+                if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+                    (ctxt->sax->characters != NULL))
+                    ctxt->sax->characters(ctxt->userData, BAD_CAST "<", 1);
+                NEXT;
+            }
 
            /*
             * Fourth case : a reference. If if has not been resolved,
@@ -6004,7 +5997,7 @@
                                "HPP: entering END_TAG\n");
 #endif
                        break;
-                   } else if (cur == '<') {
+                   } else if ((cur == '<') && IS_ASCII_LETTER(next)) {
                         if ((!terminate) && (next == 0))
                             goto done;
                         ctxt->instate = XML_PARSER_START_TAG;
@@ -6014,6 +6007,12 @@
                                 "HPP: entering START_TAG\n");
 #endif
                        break;
+                   } else if (cur == '<') {
+                        if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+                            (ctxt->sax->characters != NULL))
+                           ctxt->sax->characters(ctxt->userData,
+                                                 BAD_CAST "<", 1);
+                        NEXT;
                    } else {
                        /*
                         * check that the text sequence is complete
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/NEWS new/libxml2-2.9.14/NEWS
--- old/libxml2-2.9.13/NEWS     2022-02-19 19:26:42.000000000 +0100
+++ new/libxml2-2.9.14/NEWS     2022-05-02 13:12:13.000000000 +0200
@@ -1,12 +1,36 @@
 
         NEWS file for libxml2
 
-The change log at 
-ChangeLog.html
- describes the recents commits
-to the GIT at 
-https://gitlab.gnome.org/GNOME/libxml2
- code base.Here is the list of public releases:
+v2.9.14: May 02 2022:
+   - Security:
+  [CVE-2022-29824] Integer overflow in xmlBuf and xmlBuffer
+  Fix potential double-free in xmlXPtrStringRangeFunction
+  Fix memory leak in xmlFindCharEncodingHandler
+  Normalize XPath strings in-place
+  Prevent integer-overflow in htmlSkipBlankChars() and xmlSkipBlankChars()
+    (David Kilzer)
+  Fix leak of xmlElementContent (David Kilzer)
+
+   - Bug fixes:
+  Fix parsing of subtracted regex character classes
+  Fix recursion check in xinclude.c
+  Reset last error in xmlCleanupGlobals
+  Fix certain combinations of regex range quantifiers
+  Fix range quantifier on subregex
+
+   - Improvements:
+  Fix recovery from invalid HTML start tags
+
+   - Build system, portability:
+  Define LFS macros before including system headers
+  Initialize XPath floating-point globals
+  configure: check for icu DEFS (James Hilliard)
+  configure.ac: produce tar.xz only (GNOME policy) (David Seifert)
+  CMakeLists.txt: Fix LIBXML_VERSION_NUMBER
+  Fix build with older Python versions
+  Fix --without-valid build
+
+
 v2.9.13: Feb 19 2022:
    - Security:
   [CVE-2022-23308] Use-after-free of ID and IDREF attributes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/buf.c new/libxml2-2.9.14/buf.c
--- old/libxml2-2.9.13/buf.c    2020-08-15 01:13:35.000000000 +0200
+++ new/libxml2-2.9.14/buf.c    2022-05-02 12:53:57.000000000 +0200
@@ -30,6 +30,10 @@
 #include <libxml/parserInternals.h> /* for XML_MAX_TEXT_LENGTH */
 #include "buf.h"
 
+#ifndef SIZE_MAX
+#define SIZE_MAX ((size_t) -1)
+#endif
+
 #define WITH_BUFFER_COMPAT
 
 /**
@@ -156,6 +160,8 @@
 xmlBufCreateSize(size_t size) {
     xmlBufPtr ret;
 
+    if (size == SIZE_MAX)
+        return(NULL);
     ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
     if (ret == NULL) {
        xmlBufMemoryError(NULL, "creating buffer");
@@ -166,8 +172,8 @@
     ret->error = 0;
     ret->buffer = NULL;
     ret->alloc = xmlBufferAllocScheme;
-    ret->size = (size ? size+2 : 0);         /* +1 for ending null */
-    ret->compat_size = (int) ret->size;
+    ret->size = (size ? size + 1 : 0);         /* +1 for ending null */
+    ret->compat_size = (ret->size > INT_MAX ? INT_MAX : ret->size);
     if (ret->size){
         ret->content = (xmlChar *) xmlMallocAtomic(ret->size * 
sizeof(xmlChar));
         if (ret->content == NULL) {
@@ -442,23 +448,17 @@
     CHECK_COMPAT(buf)
 
     if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
-    if (buf->use + len < buf->size)
+    if (len < buf->size - buf->use)
         return(buf->size - buf->use);
+    if (len > SIZE_MAX - buf->use)
+        return(0);
 
-    /*
-     * Windows has a BIG problem on realloc timing, so we try to double
-     * the buffer size (if that's enough) (bug 146697)
-     * Apparently BSD too, and it's probably best for linux too
-     * On an embedded system this may be something to change
-     */
-#if 1
-    if (buf->size > (size_t) len)
-        size = buf->size * 2;
-    else
-        size = buf->use + len + 100;
-#else
-    size = buf->use + len + 100;
-#endif
+    if (buf->size > (size_t) len) {
+        size = buf->size > SIZE_MAX / 2 ? SIZE_MAX : buf->size * 2;
+    } else {
+        size = buf->use + len;
+        size = size > SIZE_MAX - 100 ? SIZE_MAX : size + 100;
+    }
 
     if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
         /*
@@ -744,7 +744,7 @@
 int
 xmlBufResize(xmlBufPtr buf, size_t size)
 {
-    unsigned int newSize;
+    size_t newSize;
     xmlChar* rebuf = NULL;
     size_t start_buf;
 
@@ -772,9 +772,13 @@
        case XML_BUFFER_ALLOC_IO:
        case XML_BUFFER_ALLOC_DOUBLEIT:
            /*take care of empty case*/
-           newSize = (buf->size ? buf->size*2 : size + 10);
+            if (buf->size == 0) {
+                newSize = (size > SIZE_MAX - 10 ? SIZE_MAX : size + 10);
+            } else {
+                newSize = buf->size;
+            }
            while (size > newSize) {
-               if (newSize > UINT_MAX / 2) {
+               if (newSize > SIZE_MAX / 2) {
                    xmlBufMemoryError(buf, "growing buffer");
                    return 0;
                }
@@ -782,15 +786,15 @@
            }
            break;
        case XML_BUFFER_ALLOC_EXACT:
-           newSize = size+10;
+            newSize = (size > SIZE_MAX - 10 ? SIZE_MAX : size + 10);
            break;
         case XML_BUFFER_ALLOC_HYBRID:
             if (buf->use < BASE_BUFFER_SIZE)
                 newSize = size;
             else {
-                newSize = buf->size * 2;
+                newSize = buf->size;
                 while (size > newSize) {
-                    if (newSize > UINT_MAX / 2) {
+                    if (newSize > SIZE_MAX / 2) {
                         xmlBufMemoryError(buf, "growing buffer");
                         return 0;
                     }
@@ -800,7 +804,7 @@
             break;
 
        default:
-           newSize = size+10;
+            newSize = (size > SIZE_MAX - 10 ? SIZE_MAX : size + 10);
            break;
     }
 
@@ -866,7 +870,7 @@
  */
 int
 xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len) {
-    unsigned int needSize;
+    size_t needSize;
 
     if ((str == NULL) || (buf == NULL) || (buf->error))
        return -1;
@@ -888,8 +892,10 @@
     if (len < 0) return -1;
     if (len == 0) return 0;
 
-    needSize = buf->use + len + 2;
-    if (needSize > buf->size){
+    if ((size_t) len >= buf->size - buf->use) {
+        if ((size_t) len >= SIZE_MAX - buf->use)
+            return(-1);
+        needSize = buf->use + len + 1;
        if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
            /*
             * Used to provide parsing limits
@@ -1025,31 +1031,7 @@
  */
 int
 xmlBufCCat(xmlBufPtr buf, const char *str) {
-    const char *cur;
-
-    if ((buf == NULL) || (buf->error))
-        return(-1);
-    CHECK_COMPAT(buf)
-    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
-    if (str == NULL) {
-#ifdef DEBUG_BUFFER
-        xmlGenericError(xmlGenericErrorContext,
-               "xmlBufCCat: str == NULL\n");
-#endif
-       return -1;
-    }
-    for (cur = str;*cur != 0;cur++) {
-        if (buf->use  + 10 >= buf->size) {
-            if (!xmlBufResize(buf, buf->use+10)){
-               xmlBufMemoryError(buf, "growing buffer");
-                return XML_ERR_NO_MEMORY;
-            }
-        }
-        buf->content[buf->use++] = *cur;
-    }
-    buf->content[buf->use] = 0;
-    UPDATE_COMPAT(buf)
-    return 0;
+    return xmlBufCat(buf, (const xmlChar *) str);
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/configure.ac new/libxml2-2.9.14/configure.ac
--- old/libxml2-2.9.13/configure.ac     2022-02-19 19:26:42.000000000 +0100
+++ new/libxml2-2.9.14/configure.ac     2022-05-02 13:12:33.000000000 +0200
@@ -3,7 +3,7 @@
 
 m4_define([MAJOR_VERSION], 2)
 m4_define([MINOR_VERSION], 9)
-m4_define([MICRO_VERSION], 13)
+m4_define([MICRO_VERSION], 14)
 
 AC_INIT([libxml2],[MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION])
 AC_CONFIG_SRCDIR([entities.c])
@@ -40,7 +40,7 @@
 
 VERSION=${LIBXML_VERSION}
 
-AM_INIT_AUTOMAKE([foreign])
+AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-xz])
 
 # Support silent build rules, requires at least automake-1.11. Disable
 # by either passing --disable-silent-rules to configure or passing V=1
@@ -1475,6 +1475,13 @@
         [have_libicu=yes],
         [have_libicu=no])
 
+    if test "x$have_libicu" = "xyes"; then
+        PKG_CHECK_VAR([ICU_DEFS], [icu-i18n], [DEFS])
+        if test "x$ICU_DEFS" != "x"; then
+            CPPFLAGS="$CPPFLAGS $ICU_DEFS"
+        fi
+    fi
+
     # If pkg-config failed, fall back to AC_CHECK_LIB. This
     # will not pick up the necessary LIBS flags for liblzma's
     # private dependencies, though, so static linking may fail.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/encoding.c new/libxml2-2.9.14/encoding.c
--- old/libxml2-2.9.13/encoding.c       2022-02-12 16:36:48.000000000 +0100
+++ new/libxml2-2.9.14/encoding.c       2022-05-02 12:52:45.000000000 +0200
@@ -1738,6 +1738,10 @@
     } else if ((icv_in != (iconv_t) -1) || icv_out != (iconv_t) -1) {
            xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
                    "iconv : problems with filters for '%s'\n", name);
+           if (icv_in != (iconv_t) -1)
+               iconv_close(icv_in);
+           else
+               iconv_close(icv_out);
     }
 #endif /* LIBXML_ICONV_ENABLED */
 #ifdef LIBXML_ICU_ENABLED
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/globals.c new/libxml2-2.9.14/globals.c
--- old/libxml2-2.9.13/globals.c        2020-08-06 11:09:16.000000000 +0200
+++ new/libxml2-2.9.14/globals.c        2022-05-02 12:52:45.000000000 +0200
@@ -50,20 +50,6 @@
         xmlThrDefMutex = xmlNewMutex();
 }
 
-/**
- * xmlCleanupGlobals:
- *
- * Additional cleanup for multi-threading
- */
-void xmlCleanupGlobals(void)
-{
-    if (xmlThrDefMutex != NULL) {
-       xmlFreeMutex(xmlThrDefMutex);
-       xmlThrDefMutex = NULL;
-    }
-    __xmlGlobalInitMutexDestroy();
-}
-
 /************************************************************************
  *                                                                     *
  *     All the user accessible global variables of the library         *
@@ -578,6 +564,22 @@
 }
 
 /**
+ * xmlCleanupGlobals:
+ *
+ * Additional cleanup for multi-threading
+ */
+void xmlCleanupGlobals(void)
+{
+    xmlResetError(&xmlLastError);
+
+    if (xmlThrDefMutex != NULL) {
+       xmlFreeMutex(xmlThrDefMutex);
+       xmlThrDefMutex = NULL;
+    }
+    __xmlGlobalInitMutexDestroy();
+}
+
+/**
  * DOC_DISABLE : we ignore missing doc for the xmlThrDef functions,
  *               those are really internal work
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/include/libxml/xmlversion.h 
new/libxml2-2.9.14/include/libxml/xmlversion.h
--- old/libxml2-2.9.13/include/libxml/xmlversion.h      2022-02-20 
13:11:17.000000000 +0100
+++ new/libxml2-2.9.14/include/libxml/xmlversion.h      2022-05-02 
13:42:37.000000000 +0200
@@ -29,28 +29,28 @@
  *
  * the version string like "1.2.3"
  */
-#define LIBXML_DOTTED_VERSION "2.9.13"
+#define LIBXML_DOTTED_VERSION "2.9.14"
 
 /**
  * LIBXML_VERSION:
  *
  * the version number: 1.2.3 value is 10203
  */
-#define LIBXML_VERSION 20913
+#define LIBXML_VERSION 20914
 
 /**
  * LIBXML_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "10203"
  */
-#define LIBXML_VERSION_STRING "20913"
+#define LIBXML_VERSION_STRING "20914"
 
 /**
  * LIBXML_VERSION_EXTRA:
  *
  * extra version information, used to show a git commit description
  */
-#define LIBXML_VERSION_EXTRA "-GITv2.9.12-115-ga075d256f"
+#define LIBXML_VERSION_EXTRA "-GITv2.9.13-22-g7846b0a67"
 
 /**
  * LIBXML_TEST_VERSION:
@@ -58,7 +58,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(20913);
+#define LIBXML_TEST_VERSION xmlCheckVersion(20914);
 
 #ifndef VMS
 #if 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/libxml.h new/libxml2-2.9.14/libxml.h
--- old/libxml2-2.9.13/libxml.h 2021-05-23 14:13:05.000000000 +0200
+++ new/libxml2-2.9.14/libxml.h 2022-05-02 12:52:45.000000000 +0200
@@ -9,8 +9,10 @@
 #ifndef __XML_LIBXML_H__
 #define __XML_LIBXML_H__
 
-#include <libxml/xmlstring.h>
-
+/*
+ * These macros must be defined before including system headers.
+ * Do not add any #include directives above this block.
+ */
 #ifndef NO_LARGEFILE_SOURCE
 #ifndef _LARGEFILE_SOURCE
 #define _LARGEFILE_SOURCE
@@ -39,6 +41,7 @@
 #include "config.h"
 #include <libxml/xmlversion.h>
 #endif
+#include <libxml/xmlstring.h>
 
 #if defined(__Lynx__)
 #include <stdio.h> /* pull definition of size_t */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/libxml2.spec new/libxml2-2.9.14/libxml2.spec
--- old/libxml2-2.9.13/libxml2.spec     2022-02-20 13:11:25.000000000 +0100
+++ new/libxml2-2.9.14/libxml2.spec     2022-05-02 13:42:46.000000000 +0200
@@ -2,7 +2,7 @@
 
 Summary: Library providing XML and HTML support
 Name: libxml2
-Version: 2.9.13
+Version: 2.9.14
 Release: 1%{?dist}%{?extra_release}
 License: MIT
 Group: Development/Libraries
@@ -204,6 +204,6 @@
 %endif # with_python3
 
 %changelog
-* Sun Feb 20 2022 Daniel Veillard <veill...@redhat.com>
-- upstream release 2.9.13
+* Mon May  2 2022 Daniel Veillard <veill...@redhat.com>
+- upstream release 2.9.14
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/parser.c new/libxml2-2.9.14/parser.c
--- old/libxml2-2.9.13/parser.c 2022-02-12 16:11:04.000000000 +0100
+++ new/libxml2-2.9.14/parser.c 2022-05-02 12:52:45.000000000 +0200
@@ -2208,7 +2208,8 @@
                ctxt->input->col++;
            }
            cur++;
-           res++;
+           if (res < INT_MAX)
+               res++;
            if (*cur == 0) {
                ctxt->input->cur = cur;
                xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
@@ -2244,7 +2245,8 @@
              * by the attachment of one leading and one following space (#x20)
              * character."
              */
-           res++;
+           if (res < INT_MAX)
+               res++;
         }
     }
     return(res);
@@ -14749,7 +14751,6 @@
     xmlSchemaCleanupTypes();
     xmlRelaxNGCleanupTypes();
 #endif
-    xmlResetLastError();
     xmlCleanupGlobals();
     xmlCleanupThreads(); /* must be last if called not from the main thread */
     xmlCleanupMemory();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/python/libxml.c new/libxml2-2.9.14/python/libxml.c
--- old/libxml2-2.9.13/python/libxml.c  2022-01-16 18:37:07.000000000 +0100
+++ new/libxml2-2.9.14/python/libxml.c  2022-05-02 12:52:45.000000000 +0200
@@ -1886,6 +1886,7 @@
     return(Py_None);
 }
 
+#ifdef LIBXML_VALID_ENABLED
 /***
  * xmlValidCtxt stuff
  */
@@ -2045,6 +2046,7 @@
     Py_INCREF(Py_None);
     return(Py_None);
 }
+#endif /* LIBXML_VALID_ENABLED */
 
 #ifdef LIBXML_READER_ENABLED
 /************************************************************************
@@ -3838,8 +3840,10 @@
     {(char *) "doc", libxml_doc, METH_VARARGS, NULL},
     {(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
     {(char *) "xmlNodeRemoveNsDef", libxml_xmlNodeRemoveNsDef, METH_VARARGS, 
NULL},
+#ifdef LIBXML_VALID_ENABLED
     {(char *)"xmlSetValidErrors", libxml_xmlSetValidErrors, METH_VARARGS, 
NULL},
     {(char *)"xmlFreeValidCtxt", libxml_xmlFreeValidCtxt, METH_VARARGS, NULL},
+#endif /* LIBXML_VALID_ENABLED */
 #ifdef LIBXML_OUTPUT_ENABLED
     {(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
     {(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/python/setup.py new/libxml2-2.9.14/python/setup.py
--- old/libxml2-2.9.13/python/setup.py  2022-02-20 13:11:17.000000000 +0100
+++ new/libxml2-2.9.14/python/setup.py  2022-05-02 13:42:37.000000000 +0200
@@ -6,7 +6,7 @@
 
 try:
     import setuptools
-except ModuleNotFoundError:
+except ImportError:
     pass
 
 from distutils.core import setup, Extension
@@ -254,7 +254,7 @@
 setup (name = "libxml2-python",
        # On *nix, the version number is created from setup.py.in
        # On windows, it is set by configure.js
-       version = "2.9.13",
+       version = "2.9.14",
        description = descr,
        author = "Daniel Veillard",
        author_email = "veill...@redhat.com",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/python/setup.py.in new/libxml2-2.9.14/python/setup.py.in
--- old/libxml2-2.9.13/python/setup.py.in       2022-02-14 16:19:22.000000000 
+0100
+++ new/libxml2-2.9.14/python/setup.py.in       2022-05-02 12:52:45.000000000 
+0200
@@ -6,7 +6,7 @@
 
 try:
     import setuptools
-except ModuleNotFoundError:
+except ImportError:
     pass
 
 from distutils.core import setup, Extension
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/XInclude/red.xml 
new/libxml2-2.9.14/result/XInclude/red.xml
--- old/libxml2-2.9.13/result/XInclude/red.xml  1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/result/XInclude/red.xml  2022-05-02 12:52:45.000000000 
+0200
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<book xmlns:xi="http://www.w3.org/2001/XInclude"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
+  <chapter>
+     <para xml:id="t100">Introduction</para>
+  </chapter>
+  <chapter>
+     <para xml:id="t100">Introduction</para>
+  </chapter>
+</book>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/XInclude/red.xml.rdr 
new/libxml2-2.9.14/result/XInclude/red.xml.rdr
--- old/libxml2-2.9.13/result/XInclude/red.xml.rdr      1970-01-01 
01:00:00.000000000 +0100
+++ new/libxml2-2.9.14/result/XInclude/red.xml.rdr      2022-05-02 
12:52:45.000000000 +0200
@@ -0,0 +1,26 @@
+0 1 book 0 0
+1 14 #text 0 1 
+  
+1 1 chapter 0 0
+2 14 #text 0 1 
+     
+2 1 para 0 0
+3 3 #text 0 1 Introduction
+2 15 para 0 0
+2 14 #text 0 1 
+  
+1 15 chapter 0 0
+1 14 #text 0 1 
+  
+1 1 chapter 0 0
+2 14 #text 0 1 
+     
+2 1 para 0 0
+3 3 #text 0 1 Introduction
+2 15 para 0 0
+2 14 #text 0 1 
+  
+1 15 chapter 0 0
+1 14 #text 0 1 
+
+0 15 book 0 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/XPath/expr/strings 
new/libxml2-2.9.14/result/XPath/expr/strings
--- old/libxml2-2.9.13/result/XPath/expr/strings        2022-02-04 
13:58:41.000000000 +0100
+++ new/libxml2-2.9.14/result/XPath/expr/strings        2022-05-02 
12:52:45.000000000 +0200
@@ -150,3 +150,27 @@
 ========================
 Expression: string-length("titi")
 Object is a number : 4
+
+========================
+Expression: normalize-space("  abc  def  ")
+Object is a string : abc def
+
+========================
+Expression: normalize-space("  abc  def")
+Object is a string : abc def
+
+========================
+Expression: normalize-space("abc  def  ")
+Object is a string : abc def
+
+========================
+Expression: normalize-space(" abcdef   ")
+Object is a string : abcdef
+
+========================
+Expression: normalize-space("   abcdef")
+Object is a string : abcdef
+
+========================
+Expression: normalize-space("abcdef ")
+Object is a string : abcdef
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/regexp/issue301 
new/libxml2-2.9.14/result/regexp/issue301
--- old/libxml2-2.9.13/result/regexp/issue301   1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/result/regexp/issue301   2022-05-02 12:52:45.000000000 
+0200
@@ -0,0 +1,4 @@
+Regexp: (a{1,2}|ab){2}
+abab: Ok
+Regexp: 
((1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])
+192.168.254.0: Ok
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/regexp/issue370 
new/libxml2-2.9.14/result/regexp/issue370
--- old/libxml2-2.9.13/result/regexp/issue370   1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/result/regexp/issue370   2022-05-02 13:12:19.000000000 
+0200
@@ -0,0 +1,3 @@
+Regexp: [A-Za-[G]]
+G: Fail
+a: Ok
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/result/regexp/issue65 
new/libxml2-2.9.14/result/regexp/issue65
--- old/libxml2-2.9.13/result/regexp/issue65    1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/result/regexp/issue65    2022-05-02 12:52:45.000000000 
+0200
@@ -0,0 +1,2 @@
+Regexp: ( (a|bc{0,2})){0,2} d
+ b d: Ok
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/runtest.c new/libxml2-2.9.14/runtest.c
--- old/libxml2-2.9.13/runtest.c        2022-02-07 15:43:59.000000000 +0100
+++ new/libxml2-2.9.14/runtest.c        2022-05-02 12:52:45.000000000 +0200
@@ -2147,10 +2147,10 @@
              int options) {
     xmlDocPtr doc;
     const char *base = NULL;
-    int size, res = 0;
+    int size, res = 0, fd;
 
     nb_tests++;
-    int fd = open(filename, RD_FLAGS);
+    fd = open(filename, RD_FLAGS);
 #ifdef LIBXML_HTML_ENABLED
     if (options & XML_PARSE_HTML) {
         doc = htmlReadFd(fd, filename, NULL, options);
@@ -2647,6 +2647,7 @@
 }
 #endif /* LIBXML_XPTR_ENABLED */
 
+#ifdef LIBXML_VALID_ENABLED
 /**
  * xmlidDocTest:
  * @filename: the file to parse
@@ -2714,6 +2715,7 @@
     }
     return(res);
 }
+#endif /* LIBXML_VALID_ENABLED */
 
 #endif /* LIBXML_DEBUG_ENABLED */
 #endif /* XPATH */
@@ -4315,6 +4317,7 @@
     { "XML Namespaces regression tests",
       errParseTest, "./test/namespaces/*", "result/namespaces/", "", ".err",
       0 },
+#ifdef LIBXML_VALID_ENABLED
     { "Error cases regression tests",
       errParseTest, "./test/errors/*.xml", "result/errors/", "", ".err",
       0 },
@@ -4327,10 +4330,13 @@
     { "Error cases regression tests (old 1.0)",
       errParseTest, "./test/errors10/*.xml", "result/errors10/", "", ".err",
       XML_PARSE_OLD10 },
+#endif
 #ifdef LIBXML_READER_ENABLED
+#ifdef LIBXML_VALID_ENABLED
     { "Error cases stream regression tests",
       streamParseTest, "./test/errors/*.xml", "result/errors/", NULL, ".str",
       0 },
+#endif
     { "Reader regression tests",
       streamParseTest, "./test/*", "result/", ".rdr", NULL,
       0 },
@@ -4430,11 +4436,13 @@
       xptrDocTest, "./test/XPath/docs/*", NULL, NULL, NULL,
       0 },
 #endif
+#ifdef LIBXML_VALID_ENABLED
     { "xml:id regression tests" ,
       xmlidDocTest, "./test/xmlid/*", "result/xmlid/", "", ".err",
       0 },
 #endif
 #endif
+#endif
     { "URI parsing tests" ,
       uriParseTest, "./test/URI/*.uri", "result/URI/", "", NULL,
       0 },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/test/XInclude/docs/red.xml 
new/libxml2-2.9.14/test/XInclude/docs/red.xml
--- old/libxml2-2.9.13/test/XInclude/docs/red.xml       1970-01-01 
01:00:00.000000000 +0100
+++ new/libxml2-2.9.14/test/XInclude/docs/red.xml       2022-05-02 
12:52:45.000000000 +0200
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<book xmlns:xi="http://www.w3.org/2001/XInclude";
+      xmlns:xlink="http://www.w3.org/1999/xlink";>
+  <chapter>
+     <para xml:id="t100">Introduction</para>
+  </chapter>
+  <chapter>
+     <xi:include href="./red.xml" xpointer="t100" parse="xml"/>
+  </chapter>
+</book>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/test/XPath/expr/strings 
new/libxml2-2.9.14/test/XPath/expr/strings
--- old/libxml2-2.9.13/test/XPath/expr/strings  2020-08-06 11:09:17.000000000 
+0200
+++ new/libxml2-2.9.14/test/XPath/expr/strings  2022-05-02 12:52:45.000000000 
+0200
@@ -36,3 +36,11 @@
 substring("12345",-5000000000,5000000004)
 string-length("")
 string-length("titi")
+normalize-space("  abc  def  ")
+normalize-space("  abc  def")
+normalize-space("abc  def  ")
+normalize-space(" abcdef   ")
+normalize-space("   abcdef")
+normalize-space("abcdef ")
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/test/regexp/issue301 new/libxml2-2.9.14/test/regexp/issue301
--- old/libxml2-2.9.13/test/regexp/issue301     1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/test/regexp/issue301     2022-05-02 12:52:45.000000000 
+0200
@@ -0,0 +1,4 @@
+=>(a{1,2}|ab){2}
+abab
+=>((1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])
+192.168.254.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/test/regexp/issue370 new/libxml2-2.9.14/test/regexp/issue370
--- old/libxml2-2.9.13/test/regexp/issue370     1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/test/regexp/issue370     2022-05-02 13:12:19.000000000 
+0200
@@ -0,0 +1,3 @@
+=>[A-Za-[G]]
+G
+a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/test/regexp/issue65 new/libxml2-2.9.14/test/regexp/issue65
--- old/libxml2-2.9.13/test/regexp/issue65      1970-01-01 01:00:00.000000000 
+0100
+++ new/libxml2-2.9.14/test/regexp/issue65      2022-05-02 12:52:45.000000000 
+0200
@@ -0,0 +1,2 @@
+=>( (a|bc{0,2})){0,2} d
+ b d
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/tree.c new/libxml2-2.9.14/tree.c
--- old/libxml2-2.9.13/tree.c   2022-02-12 16:11:04.000000000 +0100
+++ new/libxml2-2.9.14/tree.c   2022-05-02 12:53:57.000000000 +0200
@@ -7104,6 +7104,8 @@
 xmlBufferCreateSize(size_t size) {
     xmlBufferPtr ret;
 
+    if (size >= UINT_MAX)
+        return(NULL);
     ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
     if (ret == NULL) {
        xmlTreeErrMemory("creating buffer");
@@ -7111,7 +7113,7 @@
     }
     ret->use = 0;
     ret->alloc = xmlBufferAllocScheme;
-    ret->size = (size ? size+2 : 0);         /* +1 for ending null */
+    ret->size = (size ? size + 1 : 0);         /* +1 for ending null */
     if (ret->size){
         ret->content = (xmlChar *) xmlMallocAtomic(ret->size * 
sizeof(xmlChar));
         if (ret->content == NULL) {
@@ -7171,6 +7173,8 @@
 
     if ((mem == NULL) || (size == 0))
         return(NULL);
+    if (size > UINT_MAX)
+        return(NULL);
 
     ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
     if (ret == NULL) {
@@ -7318,28 +7322,23 @@
  */
 int
 xmlBufferGrow(xmlBufferPtr buf, unsigned int len) {
-    int size;
+    unsigned int size;
     xmlChar *newbuf;
 
     if (buf == NULL) return(-1);
 
     if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
-    if (len + buf->use < buf->size) return(0);
+    if (len < buf->size - buf->use)
+        return(0);
+    if (len > UINT_MAX - buf->use)
+        return(-1);
 
-    /*
-     * Windows has a BIG problem on realloc timing, so we try to double
-     * the buffer size (if that's enough) (bug 146697)
-     * Apparently BSD too, and it's probably best for linux too
-     * On an embedded system this may be something to change
-     */
-#if 1
-    if (buf->size > len)
-        size = buf->size * 2;
-    else
-        size = buf->use + len + 100;
-#else
-    size = buf->use + len + 100;
-#endif
+    if (buf->size > (size_t) len) {
+        size = buf->size > UINT_MAX / 2 ? UINT_MAX : buf->size * 2;
+    } else {
+        size = buf->use + len;
+        size = size > UINT_MAX - 100 ? UINT_MAX : size + 100;
+    }
 
     if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
         size_t start_buf = buf->content - buf->contentIO;
@@ -7466,7 +7465,10 @@
        case XML_BUFFER_ALLOC_IO:
        case XML_BUFFER_ALLOC_DOUBLEIT:
            /*take care of empty case*/
-           newSize = (buf->size ? buf->size : size + 10);
+            if (buf->size == 0)
+                newSize = (size > UINT_MAX - 10 ? UINT_MAX : size + 10);
+            else
+                newSize = buf->size;
            while (size > newSize) {
                if (newSize > UINT_MAX / 2) {
                    xmlTreeErrMemory("growing buffer");
@@ -7476,7 +7478,7 @@
            }
            break;
        case XML_BUFFER_ALLOC_EXACT:
-           newSize = size+10;
+           newSize = (size > UINT_MAX - 10 ? UINT_MAX : size + 10);;
            break;
         case XML_BUFFER_ALLOC_HYBRID:
             if (buf->use < BASE_BUFFER_SIZE)
@@ -7494,7 +7496,7 @@
             break;
 
        default:
-           newSize = size+10;
+           newSize = (size > UINT_MAX - 10 ? UINT_MAX : size + 10);;
            break;
     }
 
@@ -7580,8 +7582,10 @@
     if (len < 0) return -1;
     if (len == 0) return 0;
 
-    needSize = buf->use + len + 2;
-    if (needSize > buf->size){
+    if ((unsigned) len >= buf->size - buf->use) {
+        if ((unsigned) len >= UINT_MAX - buf->use)
+            return XML_ERR_NO_MEMORY;
+        needSize = buf->use + len + 1;
         if (!xmlBufferResize(buf, needSize)){
            xmlTreeErrMemory("growing buffer");
             return XML_ERR_NO_MEMORY;
@@ -7694,29 +7698,7 @@
  */
 int
 xmlBufferCCat(xmlBufferPtr buf, const char *str) {
-    const char *cur;
-
-    if (buf == NULL)
-        return(-1);
-    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
-    if (str == NULL) {
-#ifdef DEBUG_BUFFER
-        xmlGenericError(xmlGenericErrorContext,
-               "xmlBufferCCat: str == NULL\n");
-#endif
-       return -1;
-    }
-    for (cur = str;*cur != 0;cur++) {
-        if (buf->use  + 10 >= buf->size) {
-            if (!xmlBufferResize(buf, buf->use+10)){
-               xmlTreeErrMemory("growing buffer");
-                return XML_ERR_NO_MEMORY;
-            }
-        }
-        buf->content[buf->use++] = *cur;
-    }
-    buf->content[buf->use] = 0;
-    return 0;
+    return xmlBufferCat(buf, (const xmlChar *) str);
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/valid.c new/libxml2-2.9.14/valid.c
--- old/libxml2-2.9.13/valid.c  2022-02-19 19:26:42.000000000 +0100
+++ new/libxml2-2.9.14/valid.c  2022-05-02 12:52:45.000000000 +0200
@@ -479,35 +479,6 @@
     return (ret);
 }
 
-/**
- * xmlValidNormalizeString:
- * @str: a string
- *
- * Normalize a string in-place.
- */
-static void
-xmlValidNormalizeString(xmlChar *str) {
-    xmlChar *dst;
-    const xmlChar *src;
-
-    if (str == NULL)
-        return;
-    src = str;
-    dst = str;
-
-    while (*src == 0x20) src++;
-    while (*src != 0) {
-       if (*src == 0x20) {
-           while (*src == 0x20) src++;
-           if (*src != 0)
-               *dst++ = 0x20;
-       } else {
-           *dst++ = *src++;
-       }
-    }
-    *dst = 0;
-}
-
 #ifdef DEBUG_VALID_ALGO
 static void
 xmlValidPrintNode(xmlNodePtr cur) {
@@ -1081,6 +1052,7 @@
            tmp->type = cur->type;
            tmp->ocur = cur->ocur;
            prev->c2 = tmp;
+           tmp->parent = prev;
            if (cur->name != NULL) {
                if (dict)
                    tmp->name = xmlDictLookup(dict, cur->name, -1);
@@ -2636,6 +2608,35 @@
            (xmlDictOwns(dict, (const xmlChar *)(str)) == 0)))  \
            xmlFree((char *)(str));
 
+/**
+ * xmlValidNormalizeString:
+ * @str: a string
+ *
+ * Normalize a string in-place.
+ */
+static void
+xmlValidNormalizeString(xmlChar *str) {
+    xmlChar *dst;
+    const xmlChar *src;
+
+    if (str == NULL)
+        return;
+    src = str;
+    dst = str;
+
+    while (*src == 0x20) src++;
+    while (*src != 0) {
+       if (*src == 0x20) {
+           while (*src == 0x20) src++;
+           if (*src != 0)
+               *dst++ = 0x20;
+       } else {
+           *dst++ = *src++;
+       }
+    }
+    *dst = 0;
+}
+
 static int
 xmlIsStreaming(xmlValidCtxtPtr ctxt) {
     xmlParserCtxtPtr pctxt;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/xinclude.c new/libxml2-2.9.14/xinclude.c
--- old/libxml2-2.9.13/xinclude.c       2022-02-01 16:02:06.000000000 +0100
+++ new/libxml2-2.9.14/xinclude.c       2022-05-02 12:52:45.000000000 +0200
@@ -525,8 +525,6 @@
        if (href == NULL)
            return(-1);
     }
-    if ((href[0] == '#') || (href[0] == 0))
-       local = 1;
     parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
     if (parse != NULL) {
        if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
@@ -623,6 +621,9 @@
        return(-1);
     }
 
+    if (xmlStrEqual(URL, ctxt->doc->URL))
+       local = 1;
+
     /*
      * If local and xml then we need a fragment
      */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/xmlregexp.c new/libxml2-2.9.14/xmlregexp.c
--- old/libxml2-2.9.13/xmlregexp.c      2022-01-16 18:37:07.000000000 +0100
+++ new/libxml2-2.9.14/xmlregexp.c      2022-05-02 13:12:19.000000000 +0200
@@ -1693,12 +1693,12 @@
                    counter = xmlRegGetCounter(ctxt);
                    ctxt->counters[counter].min = atom->min - 1;
                    ctxt->counters[counter].max = atom->max - 1;
-                   /* count the number of times we see it again */
-                   xmlFAGenerateCountedEpsilonTransition(ctxt, atom->stop,
-                                                  atom->start, counter);
                    /* allow a way out based on the count */
                    xmlFAGenerateCountedTransition(ctxt, atom->stop,
                                                   newstate, counter);
+                   /* count the number of times we see it again */
+                   xmlFAGenerateCountedEpsilonTransition(ctxt, atom->stop,
+                                                  atom->start, counter);
                    /* and if needed allow a direct exit for 0 */
                    if (atom->min == 0)
                        xmlFAGenerateEpsilonTransition(ctxt, atom->start0,
@@ -3364,7 +3364,6 @@
                    /*
                     * this is a multiple input sequence
                     * If there is a counter associated increment it now.
-                    * before potentially saving and rollback
                     * do not increment if the counter is already over the
                     * maximum limit in which case get to next transition
                     */
@@ -3380,15 +3379,17 @@
                        counter = &exec->comp->counters[trans->counter];
                        if (exec->counts[trans->counter] >= counter->max)
                            continue; /* for loop on transitions */
-
+                    }
+                    /* Save before incrementing */
+                   if (exec->state->nbTrans > exec->transno + 1) {
+                       xmlFARegExecSave(exec);
+                   }
+                   if (trans->counter >= 0) {
 #ifdef DEBUG_REGEXP_EXEC
                        printf("Increasing count %d\n", trans->counter);
 #endif
                        exec->counts[trans->counter]++;
                    }
-                   if (exec->state->nbTrans > exec->transno + 1) {
-                       xmlFARegExecSave(exec);
-                   }
                    exec->transcount = 1;
                    do {
                        /*
@@ -5107,7 +5108,7 @@
     }
     NEXTL(len);
     cur = CUR;
-    if ((cur != '-') || (NXT(1) == ']')) {
+    if ((cur != '-') || (NXT(1) == '[') || (NXT(1) == ']')) {
         xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
                              XML_REGEXP_CHARVAL, start, end, NULL);
        return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/xpath.c new/libxml2-2.9.14/xpath.c
--- old/libxml2-2.9.13/xpath.c  2022-01-16 18:37:07.000000000 +0100
+++ new/libxml2-2.9.14/xpath.c  2022-05-02 12:52:45.000000000 +0200
@@ -488,9 +488,9 @@
  *                                                                     *
  ************************************************************************/
 
-double xmlXPathNAN;
-double xmlXPathPINF;
-double xmlXPathNINF;
+double xmlXPathNAN = 0.0;
+double xmlXPathPINF = 0.0;
+double xmlXPathNINF = 0.0;
 
 /**
  * xmlXPathInit:
@@ -9260,52 +9260,45 @@
  */
 void
 xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-  xmlXPathObjectPtr obj = NULL;
-  xmlChar *source = NULL;
-  xmlBufPtr target;
-  xmlChar blank;
-
-  if (ctxt == NULL) return;
-  if (nargs == 0) {
-    /* Use current context node */
-      valuePush(ctxt,
-         xmlXPathCacheWrapString(ctxt->context,
-           xmlXPathCastNodeToString(ctxt->context->node)));
-    nargs = 1;
-  }
+    xmlChar *source, *target;
+    int blank;
 
-  CHECK_ARITY(1);
-  CAST_TO_STRING;
-  CHECK_TYPE(XPATH_STRING);
-  obj = valuePop(ctxt);
-  source = obj->stringval;
+    if (ctxt == NULL) return;
+    if (nargs == 0) {
+        /* Use current context node */
+        valuePush(ctxt,
+            xmlXPathCacheWrapString(ctxt->context,
+                xmlXPathCastNodeToString(ctxt->context->node)));
+        nargs = 1;
+    }
 
-  target = xmlBufCreate();
-  if (target && source) {
+    CHECK_ARITY(1);
+    CAST_TO_STRING;
+    CHECK_TYPE(XPATH_STRING);
+    source = ctxt->value->stringval;
+    if (source == NULL)
+        return;
+    target = source;
 
     /* Skip leading whitespaces */
     while (IS_BLANK_CH(*source))
-      source++;
+        source++;
 
     /* Collapse intermediate whitespaces, and skip trailing whitespaces */
     blank = 0;
     while (*source) {
-      if (IS_BLANK_CH(*source)) {
-       blank = 0x20;
-      } else {
-       if (blank) {
-         xmlBufAdd(target, &blank, 1);
-         blank = 0;
-       }
-       xmlBufAdd(target, source, 1);
-      }
-      source++;
+        if (IS_BLANK_CH(*source)) {
+           blank = 1;
+        } else {
+            if (blank) {
+                *target++ = 0x20;
+                blank = 0;
+            }
+            *target++ = *source;
+        }
+        source++;
     }
-    valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufContent(target)));
-    xmlBufFree(target);
-  }
-  xmlXPathReleaseObject(ctxt->context, obj);
+    *target = 0;
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libxml2-2.9.13/xpointer.c new/libxml2-2.9.14/xpointer.c
--- old/libxml2-2.9.13/xpointer.c       2022-02-12 16:11:04.000000000 +0100
+++ new/libxml2-2.9.14/xpointer.c       2022-05-02 12:52:45.000000000 +0200
@@ -2756,6 +2756,7 @@
         */
        tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
        xmlXPathFreeObject(set);
+        set = NULL;
        if (tmp == NULL) {
             xmlXPathErr(ctxt, XPATH_MEMORY_ERROR);
             goto error;

Reply via email to