libxml2 r3759 - in trunk: . include/libxml



Author: veillard
Date: Wed Jul 30 12:35:40 2008
New Revision: 3759
URL: http://svn.gnome.org/viewvc/libxml2?rev=3759&view=rev

Log:
* parser.c include/libxml/xmlerror.h: an XML-1.0 document can't load
  an 1.1 entity
* runxmlconf.c: when using entities make sure we load them
Daniel


Modified:
   trunk/ChangeLog
   trunk/include/libxml/xmlerror.h
   trunk/parser.c
   trunk/runxmlconf.c

Modified: trunk/include/libxml/xmlerror.h
==============================================================================
--- trunk/include/libxml/xmlerror.h	(original)
+++ trunk/include/libxml/xmlerror.h	Wed Jul 30 12:35:40 2008
@@ -204,6 +204,7 @@
     XML_WAR_NS_COLUMN, /* 106 */
     XML_WAR_ENTITY_REDEFINED, /* 107 */
     XML_ERR_UNKNOWN_VERSION, /* 108 */
+    XML_ERR_VERSION_MISMATCH, /* 109 */
     XML_NS_ERR_XML_NAMESPACE = 200,
     XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
     XML_NS_ERR_QNAME, /* 202 */

Modified: trunk/parser.c
==============================================================================
--- trunk/parser.c	(original)
+++ trunk/parser.c	Wed Jul 30 12:35:40 2008
@@ -6204,12 +6204,10 @@
 /**
  * xmlParseTextDecl:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML declaration header for external entities
  *
  * [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'
- *
- * Question: Seems that EncodingDecl is mandatory ? Is that a typo ?
  */
 
 void
@@ -11671,10 +11669,10 @@
     if (ctxt == NULL) {
 	return(-1);
     }
-    
+
     ctxt->userData = ctxt;
     ctxt->_private = ctx->_private;
-    
+
     inputStream = xmlLoadExternalEntity((char *)URL, (char *)ID, ctxt);
     if (inputStream == NULL) {
 	xmlFreeParserCtxt(ctxt);
@@ -11687,7 +11685,7 @@
 	directory = xmlParserGetDirectory((char *)URL);
     if ((ctxt->directory == NULL) && (directory != NULL))
 	ctxt->directory = directory;
-    
+
     oldsax = ctxt->sax;
     ctxt->sax = ctx->sax;
     xmlDetectSAX2(ctxt);
@@ -11725,7 +11723,7 @@
 	newDoc->children->doc = ctx->myDoc;
     }
 
-    /* 
+    /*
      * Get the 4 first bytes and decode the charset
      * if enc != XML_CHAR_ENCODING_NONE
      * plug some encoding conversion routines.
@@ -11747,6 +11745,14 @@
      */
     if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
 	xmlParseTextDecl(ctxt);
+	/*
+	 * An XML-1.0 document can't reference an entity not XML-1.0
+	 */
+	if ((xmlStrEqual(ctx->version, BAD_CAST "1.0")) &&
+	    (!xmlStrEqual(ctxt->input->version, BAD_CAST "1.0"))) {
+	    xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH, 
+	                   "Version mismatch between document and entity\n");
+	}
     }
 
     /*
@@ -11780,7 +11786,7 @@
     ctxt->linenumbers = ctx->linenumbers;
 
     xmlParseContent(ctxt);
-   
+
     ctx->validate = ctxt->validate;
     ctx->valid = ctxt->valid;
     if ((RAW == '<') && (NXT(1) == '/')) {
@@ -11823,7 +11829,7 @@
     newDoc->intSubset = NULL;
     newDoc->extSubset = NULL;
     xmlFreeDoc(newDoc);
-    
+
     return(ret);
 }
 

Modified: trunk/runxmlconf.c
==============================================================================
--- trunk/runxmlconf.c	(original)
+++ trunk/runxmlconf.c	Wed Jul 30 12:35:40 2008
@@ -322,6 +322,7 @@
     entities = xmlGetProp(cur, BAD_CAST "ENTITIES");
     if (!xmlStrEqual(entities, BAD_CAST "none")) {
         options |= XML_PARSE_DTDLOAD;
+        options |= XML_PARSE_NOENT;
     }
     rec = xmlGetProp(cur, BAD_CAST "RECOMMENDATION");
     if ((rec == NULL) ||



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]