Also fix 3 cases in the regression tests where the prefix: was
erroneously dropped in such case
-diff --git a/SAX2.c b/SAX2.c
-index c0482c0..0c48d65 100644
---- a/SAX2.c
-+++ b/SAX2.c
-@@ -2163,6 +2163,7 @@ xmlSAX2StartElementNs(void *ctx,
+Index: SAX2.c
+===================================================================
+--- SAX2.c.orig
++++ SAX2.c
+@@ -2162,7 +2162,6 @@ xmlSAX2StartElementNs(void *ctx,
xmlNodePtr parent;
xmlNsPtr last = NULL, ns;
const xmlChar *uri, *pref;
-+ xmlChar *lname = NULL;
+- xmlChar *lname = NULL;
int i, j;
if (ctx == NULL) return;
-@@ -2182,6 +2183,20 @@ xmlSAX2StartElementNs(void *ctx,
+@@ -2182,20 +2181,6 @@ xmlSAX2StartElementNs(void *ctx,
}
/*
-+ * Take care of the rare case of an undefined namespace prefix
-+ */
-+ if ((prefix != NULL) && (URI == NULL)) {
-+ if (ctxt->dictNames) {
-+ const xmlChar *fullname;
-+
-+ fullname = xmlDictQLookup(ctxt->dict, prefix, localname);
-+ if (fullname != NULL)
-+ localname = fullname;
-+ } else {
-+ lname = xmlBuildQName(localname, prefix, NULL, 0);
-+ }
-+ }
-+ /*
+- * Take care of the rare case of an undefined namespace prefix
+- */
+- if ((prefix != NULL) && (URI == NULL)) {
+- if (ctxt->dictNames) {
+- const xmlChar *fullname;
+-
+- fullname = xmlDictQLookup(ctxt->dict, prefix, localname);
+- if (fullname != NULL)
+- localname = fullname;
+- } else {
+- lname = xmlBuildQName(localname, prefix, NULL, 0);
+- }
+- }
+- /*
* allocate the node
*/
if (ctxt->freeElems != NULL) {
-@@ -2194,7 +2209,10 @@ xmlSAX2StartElementNs(void *ctx,
+@@ -2208,10 +2193,7 @@ xmlSAX2StartElementNs(void *ctx,
if (ctxt->dictNames)
ret->name = localname;
else {
-- ret->name = xmlStrdup(localname);
-+ if (lname == NULL)
-+ ret->name = xmlStrdup(localname);
-+ else
-+ ret->name = lname;
+- if (lname == NULL)
+- ret->name = xmlStrdup(localname);
+- else
+- ret->name = lname;
++ ret->name = xmlStrdup(localname);
if (ret->name == NULL) {
xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
return;
-@@ -2206,8 +2224,11 @@ xmlSAX2StartElementNs(void *ctx,
+@@ -2223,11 +2205,8 @@ xmlSAX2StartElementNs(void *ctx,
if (ctxt->dictNames)
ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
(xmlChar *) localname, NULL);
-- else
-+ else if (lname == NULL)
- ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
-+ else
-+ ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
-+ (xmlChar *) lname, NULL);
+- else if (lname == NULL)
+- ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
+ else
+- ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
+- (xmlChar *) lname, NULL);
++ ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
if (ret == NULL) {
xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
return;
-diff --git a/result/namespaces/err_7.xml b/result/namespaces/err_7.xml
-index f4e5164..4b4c662 100644
---- a/result/namespaces/err_7.xml
-+++ b/result/namespaces/err_7.xml
+@@ -2334,33 +2313,8 @@ xmlSAX2StartElementNs(void *ctx,
+ */
+ if (nb_attributes > 0) {
+ for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
+- /*
+- * Handle the rare case of an undefined atribute prefix
+- */
+- if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) {
+- if (ctxt->dictNames) {
+- const xmlChar *fullname;
+-
+- fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
+- attributes[j]);
+- if (fullname != NULL) {
+- xmlSAX2AttributeNs(ctxt, fullname, NULL,
+- attributes[j+3], attributes[j+4]);
+- continue;
+- }
+- } else {
+- lname = xmlBuildQName(attributes[j], attributes[j+1],
+- NULL, 0);
+- if (lname != NULL) {
+- xmlSAX2AttributeNs(ctxt, lname, NULL,
+- attributes[j+3], attributes[j+4]);
+- xmlFree(lname);
+- continue;
+- }
+- }
+- }
+ xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
+- attributes[j+3], attributes[j+4]);
++ attributes[j+3], attributes[j+4]);
+ }
+ }
+
+Index: result/namespaces/err_7.xml
+===================================================================
+--- result/namespaces/err_7.xml.orig
++++ result/namespaces/err_7.xml
@@ -1,2 +1,2 @@
<?xml version="1.0"?>
--<foo/>
-+<f:foo/>
-diff --git a/result/xmlid/id_tst2.xml b/result/xmlid/id_tst2.xml
-index 33ee896..856a320 100644
---- a/result/xmlid/id_tst2.xml
-+++ b/result/xmlid/id_tst2.xml
+-<f:foo/>
++<foo/>
+Index: result/xmlid/id_tst2.xml
+===================================================================
+--- result/xmlid/id_tst2.xml.orig
++++ result/xmlid/id_tst2.xml
@@ -1,6 +1,6 @@
Object is a Node Set :
Set contains 1 nodes:
--1 ELEMENT foo
-+1 ELEMENT n:foo
+-1 ELEMENT n:foo
++1 ELEMENT foo
ATTRIBUTE id
TEXT
content=bar
-diff --git a/result/xmlid/id_tst3.xml b/result/xmlid/id_tst3.xml
-index e2f8228..6d8865c 100644
---- a/result/xmlid/id_tst3.xml
-+++ b/result/xmlid/id_tst3.xml
+Index: result/xmlid/id_tst3.xml
+===================================================================
+--- result/xmlid/id_tst3.xml.orig
++++ result/xmlid/id_tst3.xml
@@ -1,6 +1,6 @@
Object is a Node Set :
Set contains 1 nodes:
--1 ELEMENT o:o
-+1 ELEMENT f:o:o
+-1 ELEMENT f:o:o
++1 ELEMENT o:o
ATTRIBUTE id
TEXT
content=bar
-commit 1c989278d9650daafc79e55750bec5a5a224a553
-Author: Daniel Veillard <veillard@redhat.com>
-Date: Thu Jan 26 19:43:06 2012 +0800
-
- Fix SAX2 builder in case of undefined attributes namespace
-
- To follow the early XML-1.0 REC, the new localname is "prefix:localname"
- and there is obviously now namespace.
-
-diff --git a/SAX2.c b/SAX2.c
-index 0c48d65..e230cea 100644
---- a/SAX2.c
-+++ b/SAX2.c
-@@ -2335,8 +2335,33 @@ xmlSAX2StartElementNs(void *ctx,
- */
- if (nb_attributes > 0) {
- for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
-+ /*
-+ * Handle the rare case of an undefined atribute prefix
-+ */
-+ if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) {
-+ if (ctxt->dictNames) {
-+ const xmlChar *fullname;
-+
-+ fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
-+ attributes[j]);
-+ if (fullname != NULL) {
-+ xmlSAX2AttributeNs(ctxt, fullname, NULL,
-+ attributes[j+3], attributes[j+4]);
-+ continue;
-+ }
-+ } else {
-+ lname = xmlBuildQName(attributes[j], attributes[j+1],
-+ NULL, 0);
-+ if (lname != NULL) {
-+ xmlSAX2AttributeNs(ctxt, lname, NULL,
-+ attributes[j+3], attributes[j+4]);
-+ xmlFree(lname);
-+ continue;
-+ }
-+ }
-+ }
- xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
-- attributes[j+3], attributes[j+4]);
-+ attributes[j+3], attributes[j+4]);
- }
- }
-