1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-21 14:53:44 +03:00

oops broke automatic defaulting of namespaces attributes. Daniel

* SAX.c: oops broke automatic defaulting of namespaces attributes.
Daniel
This commit is contained in:
Daniel Veillard
2002-02-19 21:50:43 +00:00
parent 8dc16a642a
commit 8aff24724e
2 changed files with 39 additions and 32 deletions

View File

@@ -1,3 +1,7 @@
Tue Feb 19 22:49:36 CET 2002 Daniel Veillard <daniel@veillard.com>
* SAX.c: oops broke automatic defaulting of namespaces attributes.
Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com> Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com>
* include/libxml/parserInternals.h parser.c: had to change * include/libxml/parserInternals.h parser.c: had to change

67
SAX.c
View File

@@ -1069,53 +1069,56 @@ process_external_subset:
* internal subset are not overriden by definitions in the * internal subset are not overriden by definitions in the
* external subset. * external subset.
*/ */
if ((attr->defaultValue != NULL) && if (attr->defaultValue != NULL) {
(xmlGetDtdQAttrDesc(ctxt->myDoc->extSubset,
attr->elem, attr->name,
attr->prefix) == attr) &&
(xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
attr->elem, attr->name,
attr->prefix) == NULL)) {
/* /*
* the element should be instantiated in the tree if: * the element should be instantiated in the tree if:
* - this is a namespace prefix * - this is a namespace prefix
* - the user required for completion in the tree * - the user required for completion in the tree
* like XSLT * like XSLT
* - there isn't already an attribute definition
* in the internal subset overriding it.
*/ */
if (((attr->prefix != NULL) && if (((attr->prefix != NULL) &&
(xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) || (xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) ||
((attr->prefix == NULL) && ((attr->prefix == NULL) &&
(xmlStrEqual(attr->name, BAD_CAST "xmlns"))) || (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) ||
(ctxt->loadsubset & XML_COMPLETE_ATTRS)) { (ctxt->loadsubset & XML_COMPLETE_ATTRS)) {
xmlChar *fulln; xmlAttributePtr tst;
if (attr->prefix != NULL) { tst = xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
fulln = xmlStrdup(attr->prefix); attr->elem, attr->name,
fulln = xmlStrcat(fulln, BAD_CAST ":"); attr->prefix);
fulln = xmlStrcat(fulln, attr->name); if ((tst == attr) || (tst == NULL)) {
} else { xmlChar *fulln;
fulln = xmlStrdup(attr->name);
}
/* if (attr->prefix != NULL) {
* Check that the attribute is not declared in the fulln = xmlStrdup(attr->prefix);
* serialization fulln = xmlStrcat(fulln, BAD_CAST ":");
*/ fulln = xmlStrcat(fulln, attr->name);
att = NULL; } else {
if (atts != NULL) { fulln = xmlStrdup(attr->name);
i = 0;
att = atts[i];
while (att != NULL) {
if (xmlStrEqual(att, fulln))
break;
i += 2;
att = atts[i];
} }
/*
* Check that the attribute is not declared in the
* serialization
*/
att = NULL;
if (atts != NULL) {
i = 0;
att = atts[i];
while (att != NULL) {
if (xmlStrEqual(att, fulln))
break;
i += 2;
att = atts[i];
}
}
if (att == NULL) {
attribute(ctxt, fulln, attr->defaultValue);
}
xmlFree(fulln);
} }
if (att == NULL) {
attribute(ctxt, fulln, attr->defaultValue);
}
xmlFree(fulln);
} }
} }
attr = attr->nexth; attr = attr->nexth;