Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > 3711dfffa3acd4c4e3acb45c886aa490 > files > 2

libxml2-2.7.1-1.2.1mdv2009.0.src.rpm

diff -Naurp libxml2-2.7.1/ChangeLog libxml2-2.7.1.oden/ChangeLog
--- libxml2-2.7.1/ChangeLog	2008-09-01 16:49:56.000000000 +0200
+++ libxml2-2.7.1.oden/ChangeLog	2009-03-16 12:28:59.000000000 +0100
@@ -1,3 +1,8 @@
+Mon Jan 05 18:28:41 CET 2009 Rob Richards <rrichards@cdatazone.org>
+
+	* include/libxml/parser.h parser.c: add XML_PARSE_OLDSAX parser 
+	  option to enable pre 2.7 SAX behavior.
+
 Mon Sep  1 16:49:05 CEST 2008 Daniel Veillard <daniel@veillard.com>
 
 	* doc/xml.html doc/news.html configure.in python/setup.py NEWS:
diff -Naurp libxml2-2.7.1/include/libxml/parser.h libxml2-2.7.1.oden/include/libxml/parser.h
--- libxml2-2.7.1/include/libxml/parser.h	2008-08-28 09:46:31.000000000 +0200
+++ libxml2-2.7.1.oden/include/libxml/parser.h	2009-03-16 12:28:31.000000000 +0100
@@ -1096,7 +1096,8 @@ typedef enum {
 				   crash if you try to modify the tree) */
     XML_PARSE_OLD10	= 1<<17,/* parse using XML-1.0 before update 5 */
     XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */
-    XML_PARSE_HUGE      = 1<<19 /* relax any hardcoded limit from the parser */
+    XML_PARSE_HUGE      = 1<<19, /* relax any hardcoded limit from the parser */
+    XML_PARSE_OLDSAX    = 1<<20 /* parse using SAX2 interface from before 2.7.0 */
 } xmlParserOption;
 
 XMLPUBFUN void XMLCALL
diff -Naurp libxml2-2.7.1/parser.c libxml2-2.7.1.oden/parser.c
--- libxml2-2.7.1/parser.c	2009-03-16 12:33:41.000000000 +0100
+++ libxml2-2.7.1.oden/parser.c	2009-03-16 12:32:43.000000000 +0100
@@ -7041,9 +7041,11 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt)
     /*
      * Predefined entites override any extra definition
      */
-    ent = xmlGetPredefinedEntity(name);
-    if (ent != NULL)
-        return(ent);
+    if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
+        ent = xmlGetPredefinedEntity(name);
+        if (ent != NULL)
+            return(ent);
+    }
 
     /*
      * Increate the number of entity references parsed
@@ -7057,6 +7059,9 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt)
     if (ctxt->sax != NULL) {
 	if (ctxt->sax->getEntity != NULL)
 	    ent = ctxt->sax->getEntity(ctxt->userData, name);
+	if ((ctxt->wellFormed == 1 ) && (ent == NULL) && 
+	    (ctxt->options & XML_PARSE_OLDSAX))
+	    ent = xmlGetPredefinedEntity(name);
 	if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
 	    (ctxt->userData==ctxt)) {
 	    ent = xmlSAX2GetEntity(ctxt, name);
@@ -7129,6 +7134,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt)
      */
     else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
 	     (ent != NULL) && (ent->content != NULL) &&
+	     (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
 	     (xmlStrchr(ent->content, '<'))) {
 	xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
     "'<' in entity '%s' is not allowed in attributes values\n", name);
@@ -7224,10 +7230,13 @@ xmlParseStringEntityRef(xmlParserCtxtPtr
     /*
      * Predefined entites override any extra definition
      */
-    ent = xmlGetPredefinedEntity(name);
-    if (ent != NULL) {
-        *str = ptr;
-        return(ent);
+    if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
+        ent = xmlGetPredefinedEntity(name);
+        if (ent != NULL) {
+            xmlFree(name);
+            *str = ptr;
+            return(ent);
+        }
     }
 
     /*
@@ -7242,6 +7251,8 @@ xmlParseStringEntityRef(xmlParserCtxtPtr
     if (ctxt->sax != NULL) {
 	if (ctxt->sax->getEntity != NULL)
 	    ent = ctxt->sax->getEntity(ctxt->userData, name);
+	if ((ent == NULL) && (ctxt->options & XML_PARSE_OLDSAX))
+	    ent = xmlGetPredefinedEntity(name);
 	if ((ent == NULL) && (ctxt->userData==ctxt)) {
 	    ent = xmlSAX2GetEntity(ctxt, name);
 	}
@@ -7310,6 +7321,7 @@ xmlParseStringEntityRef(xmlParserCtxtPtr
      */
     else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
 	     (ent != NULL) && (ent->content != NULL) &&
+	     (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
 	     (xmlStrchr(ent->content, '<'))) {
 	xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
      "'<' in entity '%s' is not allowed in attributes values\n",
@@ -14203,6 +14215,10 @@ xmlCtxtUseOptionsInternal(xmlParserCtxtP
 	ctxt->options |= XML_PARSE_HUGE;
         options -= XML_PARSE_HUGE;
     }
+    if (options & XML_PARSE_OLDSAX) {
+	ctxt->options |= XML_PARSE_OLDSAX;
+        options -= XML_PARSE_OLDSAX;
+    }
     ctxt->linenumbers = 1;
     return (options);
 }