enhanced to assure that if xpointer is called for a document, the

* xinclude.c: enhanced to assure that if xpointer is called
  for a document, the XML_PARSE_NOENT flag is set before parsing
  the included document so that entities will automatically get
  taken care of.
* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
  is encountered, it will log it and not crash (bug 135713)
diff --git a/ChangeLog b/ChangeLog
index 7d2dbc3..11cb097 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Mon Mar  8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+	* xinclude.c: enhanced to assure that if xpointer is called
+	  for a document, the XML_PARSE_NOENT flag is set before parsing
+	  the included document so that entities will automatically get
+	  taken care of.
+	* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
+	  is encountered, it will log it and not crash (bug 135713)
+
 Sun Mar  7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>
 
 	* xinclude.c: modified to make sub-includes inherit the
diff --git a/xinclude.c b/xinclude.c
index 629c850..3cf1f54 100644
--- a/xinclude.c
+++ b/xinclude.c
@@ -1361,6 +1361,9 @@
     xmlChar *URL;
     xmlChar *fragment = NULL;
     int i = 0;
+#ifdef LIBXML_XPTR_ENABLED
+    int saveFlags;
+#endif
 
 #ifdef DEBUG_XINCLUDE
     xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
@@ -1425,7 +1428,22 @@
 #ifdef DEBUG_XINCLUDE
     printf("loading %s\n", URL);
 #endif
+#ifdef LIBXML_XPTR_ENABLED
+    /*
+     * If this is an XPointer evaluation, we want to assure that
+     * all entities have been resolved prior to processing the
+     * referenced document
+     */
+    saveFlags = ctxt->parseFlags;
+    if (fragment != NULL) {	/* if this is an XPointer eval */
+	ctxt->parseFlags |= XML_PARSE_NOENT;
+    }
+#endif
+
     doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
+#ifdef LIBXML_XPTR_ENABLED
+    ctxt->parseFlags = saveFlags;
+#endif
     if (doc == NULL) {
 	xmlFree(URL);
 	if (fragment != NULL)
diff --git a/xpointer.c b/xpointer.c
index de09824..7f014de 100644
--- a/xpointer.c
+++ b/xpointer.c
@@ -2308,6 +2308,7 @@
 	    (*level)++;
 	goto found;
     }
+skip:		/* This label should only be needed if something is wrong! */
     if (cur->next != NULL) {
 	cur = cur->next;
 	goto found;
@@ -2328,11 +2329,13 @@
 	(cur->type != XML_TEXT_NODE) &&
 	(cur->type != XML_DOCUMENT_NODE) &&
 	(cur->type != XML_HTML_DOCUMENT_NODE) &&
-	(cur->type != XML_CDATA_SECTION_NODE))
-	goto next;
-    if (cur->type == XML_ENTITY_REF_NODE) {
-	TODO
-    }
+	(cur->type != XML_CDATA_SECTION_NODE)) {
+	    if (cur->type == XML_ENTITY_REF_NODE) {	/* Shouldn't happen */
+		TODO
+		goto skip;
+	    }
+	    goto next;
+	}
     return(cur);
 }