summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-06-25 22:52:29 +0200
committerMarius Bakke <marius@gnu.org>2022-06-26 12:06:28 +0200
commit7dfa2ff7804b4d4ffb4c256c5aaea92b2487b369 (patch)
treec4aba7a069299d97558b19b88e3fd25eff5ead93 /gnu/packages
parent138115b012cd5b223d8f12fc62e3bd13202be737 (diff)
downloadguix-7dfa2ff7804b4d4ffb4c256c5aaea92b2487b369.tar.gz
gnu: libxml2: Update to 2.9.14.
* gnu/packages/xml.scm (libxml2): Update to 2.9.14.
[source](uri): Use new download location.
[source](patches): Remove.
[arguments]: Don't attempt to move non-existing "doc" directory.
* gnu/packages/patches/libxml2-parent-pointers.patch,
gnu/packages/patches/libxml2-terminating-newline.patch,
gnu/packages/patches/libxml2-xpath-recursion-limit.patch: Delete files.
* gnu/local.mk (dist_patch_DATA): Adjust accordingly.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/patches/libxml2-parent-pointers.patch228
-rw-r--r--gnu/packages/patches/libxml2-terminating-newline.patch33
-rw-r--r--gnu/packages/patches/libxml2-xpath-recursion-limit.patch20
-rw-r--r--gnu/packages/xml.scm14
4 files changed, 6 insertions, 289 deletions
diff --git a/gnu/packages/patches/libxml2-parent-pointers.patch b/gnu/packages/patches/libxml2-parent-pointers.patch
deleted file mode 100644
index 1f0615c512..0000000000
--- a/gnu/packages/patches/libxml2-parent-pointers.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-Fix a regression in 2.9.12 where some corrupt XML structures were handled
-incorrectly:
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/issues/255
-
-This is an amalgamation of these upstream commits:
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/commit/85b1792e37b131e7a51af98a37f92472e8de5f3f
-  https://gitlab.gnome.org/GNOME/libxml2/-/commit/13ad8736d294536da4cbcd70a96b0a2fbf47070c
-
-diff --git a/HTMLtree.c b/HTMLtree.c
---- a/HTMLtree.c
-+++ b/HTMLtree.c
-@@ -744,7 +744,7 @@ void
- htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
- 	                 xmlNodePtr cur, const char *encoding ATTRIBUTE_UNUSED,
-                          int format) {
--    xmlNodePtr root;
-+    xmlNodePtr root, parent;
-     xmlAttrPtr attr;
-     const htmlElemDesc * info;
- 
-@@ -755,6 +755,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-     }
- 
-     root = cur;
-+    parent = cur->parent;
-     while (1) {
-         switch (cur->type) {
-         case XML_HTML_DOCUMENT_NODE:
-@@ -762,13 +763,25 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-             if (((xmlDocPtr) cur)->intSubset != NULL) {
-                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
-             }
--            if (cur->children != NULL) {
-+            /* Always validate cur->parent when descending. */
-+            if ((cur->parent == parent) && (cur->children != NULL)) {
-+                parent = cur;
-                 cur = cur->children;
-                 continue;
-             }
-             break;
- 
-         case XML_ELEMENT_NODE:
-+            /*
-+             * Some users like lxml are known to pass nodes with a corrupted
-+             * tree structure. Fall back to a recursive call to handle this
-+             * case.
-+             */
-+            if ((cur->parent != parent) && (cur->children != NULL)) {
-+                htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
-+                break;
-+            }
-+
-             /*
-              * Get specific HTML info for that node.
-              */
-@@ -817,6 +830,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-                     (cur->name != NULL) &&
-                     (cur->name[0] != 'p')) /* p, pre, param */
-                     xmlOutputBufferWriteString(buf, "\n");
-+                parent = cur;
-                 cur = cur->children;
-                 continue;
-             }
-@@ -825,9 +839,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-                 (info != NULL) && (!info->isinline)) {
-                 if ((cur->next->type != HTML_TEXT_NODE) &&
-                     (cur->next->type != HTML_ENTITY_REF_NODE) &&
--                    (cur->parent != NULL) &&
--                    (cur->parent->name != NULL) &&
--                    (cur->parent->name[0] != 'p')) /* p, pre, param */
-+                    (parent != NULL) &&
-+                    (parent->name != NULL) &&
-+                    (parent->name[0] != 'p')) /* p, pre, param */
-                     xmlOutputBufferWriteString(buf, "\n");
-             }
- 
-@@ -842,9 +856,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-                 break;
-             if (((cur->name == (const xmlChar *)xmlStringText) ||
-                  (cur->name != (const xmlChar *)xmlStringTextNoenc)) &&
--                ((cur->parent == NULL) ||
--                 ((xmlStrcasecmp(cur->parent->name, BAD_CAST "script")) &&
--                  (xmlStrcasecmp(cur->parent->name, BAD_CAST "style"))))) {
-+                ((parent == NULL) ||
-+                 ((xmlStrcasecmp(parent->name, BAD_CAST "script")) &&
-+                  (xmlStrcasecmp(parent->name, BAD_CAST "style"))))) {
-                 xmlChar *buffer;
- 
-                 buffer = xmlEncodeEntitiesReentrant(doc, cur->content);
-@@ -902,13 +916,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-                 break;
-             }
- 
--            /*
--             * The parent should never be NULL here but we want to handle
--             * corrupted documents gracefully.
--             */
--            if (cur->parent == NULL)
--                return;
--            cur = cur->parent;
-+            cur = parent;
-+            /* cur->parent was validated when descending. */
-+            parent = cur->parent;
- 
-             if ((cur->type == XML_HTML_DOCUMENT_NODE) ||
-                 (cur->type == XML_DOCUMENT_NODE)) {
-@@ -939,9 +949,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-                     (cur->next != NULL)) {
-                     if ((cur->next->type != HTML_TEXT_NODE) &&
-                         (cur->next->type != HTML_ENTITY_REF_NODE) &&
--                        (cur->parent != NULL) &&
--                        (cur->parent->name != NULL) &&
--                        (cur->parent->name[0] != 'p')) /* p, pre, param */
-+                        (parent != NULL) &&
-+                        (parent->name != NULL) &&
-+                        (parent->name[0] != 'p')) /* p, pre, param */
-                         xmlOutputBufferWriteString(buf, "\n");
-                 }
-             }
-diff --git a/xmlsave.c b/xmlsave.c
---- a/xmlsave.c
-+++ b/xmlsave.c
-@@ -847,7 +847,7 @@ htmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- static void
- xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-     int format = ctxt->format;
--    xmlNodePtr tmp, root, unformattedNode = NULL;
-+    xmlNodePtr tmp, root, unformattedNode = NULL, parent;
-     xmlAttrPtr attr;
-     xmlChar *start, *end;
-     xmlOutputBufferPtr buf;
-@@ -856,6 +856,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-     buf = ctxt->buf;
- 
-     root = cur;
-+    parent = cur->parent;
-     while (1) {
-         switch (cur->type) {
-         case XML_DOCUMENT_NODE:
-@@ -868,7 +869,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-             break;
- 
-         case XML_DOCUMENT_FRAG_NODE:
--            if (cur->children != NULL) {
-+            /* Always validate cur->parent when descending. */
-+            if ((cur->parent == parent) && (cur->children != NULL)) {
-+                parent = cur;
-                 cur = cur->children;
-                 continue;
-             }
-@@ -887,7 +890,18 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-             break;
- 
-         case XML_ELEMENT_NODE:
--	    if ((cur != root) && (ctxt->format == 1) && (xmlIndentTreeOutput))
-+            /*
-+             * Some users like lxml are known to pass nodes with a corrupted
-+             * tree structure. Fall back to a recursive call to handle this
-+             * case.
-+             */
-+            if ((cur->parent != parent) && (cur->children != NULL)) {
-+                xmlNodeDumpOutputInternal(ctxt, cur);
-+                break;
-+            }
-+
-+	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
-+                (xmlIndentTreeOutput))
- 		xmlOutputBufferWrite(buf, ctxt->indent_size *
- 				     (ctxt->level > ctxt->indent_nr ?
- 				      ctxt->indent_nr : ctxt->level),
-@@ -942,6 +956,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-                 xmlOutputBufferWrite(buf, 1, ">");
-                 if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n");
-                 if (ctxt->level >= 0) ctxt->level++;
-+                parent = cur;
-                 cur = cur->children;
-                 continue;
-             }
-@@ -1058,13 +1073,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-                 break;
-             }
- 
--            /*
--             * The parent should never be NULL here but we want to handle
--             * corrupted documents gracefully.
--             */
--            if (cur->parent == NULL)
--                return;
--            cur = cur->parent;
-+            cur = parent;
-+            /* cur->parent was validated when descending. */
-+            parent = cur->parent;
- 
-             if (cur->type == XML_ELEMENT_NODE) {
-                 if (ctxt->level > 0) ctxt->level--;
-diff --git a/xmlsave.c b/xmlsave.c
---- a/xmlsave.c
-+++ b/xmlsave.c
-@@ -890,6 +890,13 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-             break;
- 
-         case XML_ELEMENT_NODE:
-+	    if ((cur != root) && (ctxt->format == 1) &&
-+                (xmlIndentTreeOutput))
-+		xmlOutputBufferWrite(buf, ctxt->indent_size *
-+				     (ctxt->level > ctxt->indent_nr ?
-+				      ctxt->indent_nr : ctxt->level),
-+				     ctxt->indent);
-+
-             /*
-              * Some users like lxml are known to pass nodes with a corrupted
-              * tree structure. Fall back to a recursive call to handle this
-@@ -900,13 +907,6 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
-                 break;
-             }
- 
--	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
--                (xmlIndentTreeOutput))
--		xmlOutputBufferWrite(buf, ctxt->indent_size *
--				     (ctxt->level > ctxt->indent_nr ?
--				      ctxt->indent_nr : ctxt->level),
--				     ctxt->indent);
--
-             xmlOutputBufferWrite(buf, 1, "<");
-             if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
-                 xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
diff --git a/gnu/packages/patches/libxml2-terminating-newline.patch b/gnu/packages/patches/libxml2-terminating-newline.patch
deleted file mode 100644
index 3f5c88dd4e..0000000000
--- a/gnu/packages/patches/libxml2-terminating-newline.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Fix a regression in 2.9.12 where serializing empty HTML documents would
-not add a terminating newline.
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/issues/266
-
-Taken from upstream:
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/commit/92d9ab4c28842a09ca2b76d3ff2f933e01b6cd6f
-
-diff --git a/HTMLtree.c b/HTMLtree.c
---- a/HTMLtree.c
-+++ b/HTMLtree.c
-@@ -763,11 +763,15 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
-             if (((xmlDocPtr) cur)->intSubset != NULL) {
-                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
-             }
--            /* Always validate cur->parent when descending. */
--            if ((cur->parent == parent) && (cur->children != NULL)) {
--                parent = cur;
--                cur = cur->children;
--                continue;
-+            if (cur->children != NULL) {
-+                /* Always validate cur->parent when descending. */
-+                if (cur->parent == parent) {
-+                    parent = cur;
-+                    cur = cur->children;
-+                    continue;
-+                }
-+            } else {
-+                xmlOutputBufferWriteString(buf, "\n");
-             }
-             break;
- 
diff --git a/gnu/packages/patches/libxml2-xpath-recursion-limit.patch b/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
deleted file mode 100644
index 051196c635..0000000000
--- a/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Fix recursion accounting in XPath expressions:
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/issues/264
-
-Taken from upstream:
-
-  https://gitlab.gnome.org/GNOME/libxml2/-/commit/3e1aad4fe584747fd7d17cc7b2863a78e2d21a77
-
-diff --git a/xpath.c b/xpath.c
---- a/xpath.c
-+++ b/xpath.c
-@@ -10983,7 +10983,7 @@ xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
-     }
- 
-     if (xpctxt != NULL)
--        xpctxt->depth -= 1;
-+        xpctxt->depth -= 10;
- }
- 
- /**
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index c8df031cec..162a9aad9a 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -184,17 +184,15 @@ hierarchical form with variable field lengths.")
 (define-public libxml2
   (package
     (name "libxml2")
-    (version "2.9.12")
+    (version "2.9.14")
     (source (origin
              (method url-fetch)
-             (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
-                                 version ".tar.gz"))
+             (uri (string-append "https://download.gnome.org/sources/libxml2/"
+                                 (version-major+minor version)"/libxml2-"
+                                 version ".tar.xz"))
              (sha256
               (base32
-               "14hxwzmf5xqppx77z7i0ni9lpzg1a84dqpf8j8l1fvy570g6imn8"))
-             (patches (search-patches "libxml2-parent-pointers.patch"
-                                      "libxml2-terminating-newline.patch"
-                                      "libxml2-xpath-recursion-limit.patch"))))
+               "1vnzk33wfms348lgz9pvkq9li7jm44pvm73lbr3w1khwgljlmmv0"))))
     (build-system gnu-build-system)
     (outputs '("out" "static" "doc"))
     (arguments
@@ -210,7 +208,7 @@ hierarchical form with variable field lengths.")
                         (for-each (lambda (dir)
                                     (rename-file (string-append src "/share/" dir)
                                                  (string-append doc "/" dir)))
-                                  '("doc" "gtk-doc"))
+                                  '("gtk-doc"))
                         (for-each (lambda (ar)
                                     (rename-file ar (string-append dst "/"
                                                                    (basename ar))))