Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
SUSE:SLE-15-SP2:GA
python-libxml2-python
libxml2-CVE-2023-45322.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libxml2-CVE-2023-45322.patch of Package python-libxml2-python
From d39f78069dff496ec865c73aa44d7110e429bce9 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer <wellnhofer@aevum.de> Date: Wed, 23 Aug 2023 20:24:24 +0200 Subject: [PATCH] tree: Fix copying of DTDs - Don't create multiple DTD nodes. - Fix UAF if malloc fails. - Skip DTD nodes if tree module is disabled. Fixes #583. --- tree.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) Index: libxml2-2.10.3/tree.c =================================================================== --- libxml2-2.10.3.orig/tree.c +++ libxml2-2.10.3/tree.c @@ -4457,29 +4457,28 @@ static xmlNodePtr xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) { xmlNodePtr ret = NULL; xmlNodePtr p = NULL,q; + xmlDtdPtr newSubset = NULL; while (node != NULL) { -#ifdef LIBXML_TREE_ENABLED if (node->type == XML_DTD_NODE ) { - if (doc == NULL) { +#ifdef LIBXML_TREE_ENABLED + if ((doc == NULL) || (doc->intSubset != NULL)) { node = node->next; continue; } - if (doc->intSubset == NULL) { - q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node ); - if (q == NULL) return(NULL); - q->doc = doc; - q->parent = parent; - doc->intSubset = (xmlDtdPtr) q; - xmlAddChild(parent, q); - } else { - q = (xmlNodePtr) doc->intSubset; - xmlAddChild(parent, q); - } - } else + q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node ); + if (q == NULL) goto error; + q->doc = doc; + q->parent = parent; + newSubset = (xmlDtdPtr) q; +#else + node = node->next; + continue; #endif /* LIBXML_TREE_ENABLED */ + } else { q = xmlStaticCopyNode(node, doc, parent, 1); - if (q == NULL) return(NULL); + if (q == NULL) goto error; + } if (ret == NULL) { q->prev = NULL; ret = p = q; @@ -4491,9 +4490,15 @@ xmlStaticCopyNodeList(xmlNodePtr node, x } node = node->next; } + if (newSubset != NULL) + doc->intSubset = newSubset; return(ret); +error: + xmlFreeNodeList(ret); + return(NULL); } + /** * xmlCopyNode: * @node: the node
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor