one more IsEmptyElement crazyness, that time in external parsed entities

* parser.c: one more IsEmptyElement crazyness, that time in
  external parsed entities if substitution is asked.
* python/tests/reader3.py: added a specific test.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 385a8ea..2d82ecd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Jan 10 00:16:49 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+	* parser.c: one more IsEmptyElement crazyness, that time in
+	  external parsed entities if substitution is asked.
+	* python/tests/reader3.py: added a specific test.
+
 Thu Jan  9 22:35:31 CET 2003 Daniel Veillard <daniel@veillard.com>
 
 	* python/drv_libxml2.py: update from Stéphane Bidoul: python 2.1
diff --git a/parser.c b/parser.c
index 54159d3..cb2be96 100644
--- a/parser.c
+++ b/parser.c
@@ -5599,10 +5599,13 @@
 			cur = ent->children;
 			while (cur != NULL) {
 			    new = xmlCopyNode(cur, 1);
-			    if (firstChild == NULL){
-			      firstChild = new;
+			    if (new != NULL) {
+				new->_private = cur->_private;
+				if (firstChild == NULL){
+				    firstChild = new;
+				}
+				xmlAddChild(ctxt->node, new);
 			    }
-			    xmlAddChild(ctxt->node, new);
 			    if (cur == ent->last)
 				break;
 			    cur = cur->next;
diff --git a/python/tests/reader3.py b/python/tests/reader3.py
index 2a4fbe0..2458c89 100755
--- a/python/tests/reader3.py
+++ b/python/tests/reader3.py
@@ -105,6 +105,41 @@
     sys.exit(1)
 
 #
+# third test, crazy stuff about empty element in external parsed entities
+#
+s = """<!DOCTYPE struct [
+<!ENTITY simplestruct2.ent SYSTEM "simplestruct2.ent">
+]>
+<struct>&simplestruct2.ent;</struct>
+"""
+expect="""10 struct 0 0
+1 struct 0 0
+1 descr 1 1
+15 struct 0 0
+"""
+res=""
+simplestruct2_ent="""<descr/>"""
+
+def myResolver(URL, ID, ctxt):
+    if URL == "simplestruct2.ent":
+        return(StringIO.StringIO(simplestruct2_ent))
+    return None
+
+libxml2.setEntityLoader(myResolver)
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test3")
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+while reader.Read() == 1:
+    res = res + "%s %s %d %d\n" % (reader.NodeType(),reader.Name(),
+                                   reader.Depth(),reader.IsEmptyElement())
+
+if res != expect:
+    print "test3 failed: unexpected output"
+    print res
+    sys.exit(1)
+
+#
 # cleanup
 #
 del f