fixed the way the generator works, extended the testing, especially with
* gentest.py testapi.c: fixed the way the generator works,
extended the testing, especially with more real trees and nodes.
* HTMLtree.c tree.c valid.c xinclude.c xmlIO.c xmlsave.c: a bunch
of real problems found and fixed.
* entities.c: fix error reporting to go through the new handlers
Daniel
diff --git a/tree.c b/tree.c
index 046c896..fb865d7 100644
--- a/tree.c
+++ b/tree.c
@@ -3526,6 +3526,7 @@
*/
xmlNodePtr
xmlReplaceNode(xmlNodePtr old, xmlNodePtr cur) {
+ if (old == cur) return(NULL);
if ((old == NULL) || (old->parent == NULL)) {
#ifdef DEBUG_TREE
xmlGenericError(xmlGenericErrorContext,
@@ -4677,6 +4678,9 @@
*/
void
xmlNodeSetName(xmlNodePtr cur, const xmlChar *name) {
+ xmlDocPtr doc;
+ xmlDictPtr dict;
+
if (cur == NULL) return;
if (name == NULL) return;
switch(cur->type) {
@@ -4706,8 +4710,19 @@
case XML_ENTITY_DECL:
break;
}
- if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
- cur->name = xmlStrdup(name);
+ doc = cur->doc;
+ if (doc != NULL)
+ dict = doc->dict;
+ else
+ dict = NULL;
+ if (dict != NULL) {
+ if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name)))
+ xmlFree((xmlChar *) cur->name);
+ cur->name = xmlDictLookup(dict, name, -1);
+ } else {
+ if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
+ cur->name = xmlStrdup(name);
+ }
}
#endif
@@ -5690,7 +5705,7 @@
#endif
return(NULL);
}
- if (ns == NULL) {
+ if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL)) {
#ifdef DEBUG_TREE
xmlGenericError(xmlGenericErrorContext,
"xmlNewReconciliedNs : ns == NULL\n");
@@ -5758,6 +5773,9 @@
xmlAttrPtr attr;
int ret = 0, i;
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) return(-1);
+ if ((doc == NULL) || (doc->type != XML_DOCUMENT_NODE)) return(-1);
+ if (node->doc != doc) return(-1);
while (node != NULL) {
/*
* Reconciliate the node namespace