libxml2 r3729 - trunk
- From: veillard svn gnome org
- To: svn-commits-list gnome org
- Subject: libxml2 r3729 - trunk
- Date: Thu, 3 Apr 2008 12:17:22 +0100 (BST)
Author: veillard
Date: Thu Apr 3 12:17:21 2008
New Revision: 3729
URL: http://svn.gnome.org/viewvc/libxml2?rev=3729&view=rev
Log:
* tree.c: fix some problems with the *EatName functions when
running out of memory raised by Eric Schrock , should fix #438208
Daniel
Modified:
trunk/ChangeLog
trunk/tree.c
Modified: trunk/tree.c
==============================================================================
--- trunk/tree.c (original)
+++ trunk/tree.c Thu Apr 3 12:17:21 2008
@@ -1783,7 +1783,9 @@
xmlDocPtr doc = NULL;
if ((node != NULL) && (node->type != XML_ELEMENT_NODE)) {
- if (eatname == 1)
+ if ((eatname == 1) &&
+ ((node->doc == NULL) ||
+ (!(xmlDictOwns(node->doc->dict, name) == 0))))
xmlFree((xmlChar *) name);
return (NULL);
}
@@ -1793,7 +1795,9 @@
*/
cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
if (cur == NULL) {
- if (eatname == 1)
+ if ((eatname == 1) &&
+ ((node->doc == NULL) ||
+ (!(xmlDictOwns(node->doc->dict, name) == 0))))
xmlFree((xmlChar *) name);
xmlTreeErrMemory("building attribute");
return (NULL);
@@ -1933,7 +1937,7 @@
return(NULL);
}
- return xmlNewPropInternal(node, ns, name, value, 1);
+ return xmlNewPropInternal(node, ns, name, value, 1);
}
/**
@@ -2216,8 +2220,8 @@
*/
cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
if (cur == NULL) {
- xmlFree(name);
xmlTreeErrMemory("building node");
+ /* we can't check here that name comes from the doc dictionnary */
return(NULL);
}
memset(cur, 0, sizeof(xmlNode));
@@ -2296,6 +2300,11 @@
cur->children = xmlStringGetNodeList(doc, content);
UPDATE_LAST_CHILD_AND_PARENT(cur)
}
+ } else {
+ /* if name don't come from the doc dictionnary free it here */
+ if ((name != NULL) && (doc != NULL) &&
+ (!(xmlDictOwns(doc->dict, name))))
+ xmlFree(name);
}
return(cur);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]