File fix-perl.diff of Package libxml2.2672

commit 77b77b1301e052d90e6a0967534a698506afcd86
Author: Daniel Veillard <veillard@redhat.com>
Date:   Thu Jan 26 19:11:02 2012 +0800

    Fix SAX2 builder in case of undefined element namespaces
    
    Work as in XML-1.0 before namespaces, and use prefix:localname
    as the new element name (and no namespace of course)
    Also fix 3 cases in the regression tests where the prefix: was
    erroneously dropped in such case

Index: SAX2.c
===================================================================
--- SAX2.c.orig	2012-09-11 08:01:01.000000000 +0200
+++ SAX2.c	2012-12-15 16:32:27.353560391 +0100
@@ -2188,7 +2188,6 @@
     xmlNodePtr parent;
     xmlNsPtr last = NULL, ns;
     const xmlChar *uri, *pref;
-    xmlChar *lname = NULL;
     int i, j;
 
     if (ctx == NULL) return;
@@ -2208,20 +2207,6 @@
     }
 
     /*
-     * 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) {
@@ -2234,10 +2219,7 @@
 	if (ctxt->dictNames)
 	    ret->name = localname;
 	else {
-	    if (lname == NULL)
-		ret->name = xmlStrdup(localname);
-	    else
-	        ret->name = lname;
+	    ret->name = xmlStrdup(localname);
 	    if (ret->name == NULL) {
 	        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
 		return;
@@ -2249,11 +2231,8 @@
 	if (ctxt->dictNames)
 	    ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
 	                               (xmlChar *) localname, 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;
@@ -2360,31 +2339,6 @@
      */
     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]);
 	}

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"?>
-<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 n:foo
+1  ELEMENT foo
     ATTRIBUTE id
       TEXT
         content=bar
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 f:o:o
+1  ELEMENT o:o
     ATTRIBUTE id
       TEXT
         content=bar
openSUSE Build Service is sponsored by