summaryrefslogtreecommitdiff
path: root/xmlreader.c
diff options
context:
space:
mode:
Diffstat (limited to 'xmlreader.c')
-rw-r--r--xmlreader.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/xmlreader.c b/xmlreader.c
index 5fdf3a51..7efa273b 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -348,7 +348,8 @@ xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
(cur->type == XML_XINCLUDE_END)) &&
(cur->properties != NULL))
xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
+ if ((cur->content != (xmlChar *) &(cur->properties)) &&
+ (cur->type != XML_ELEMENT_NODE) &&
(cur->type != XML_XINCLUDE_START) &&
(cur->type != XML_XINCLUDE_END) &&
(cur->type != XML_ENTITY_REF_NODE)) {
@@ -422,7 +423,8 @@ xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
(cur->type == XML_XINCLUDE_END)) &&
(cur->properties != NULL))
xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
+ if ((cur->content != (xmlChar *) &(cur->properties)) &&
+ (cur->type != XML_ELEMENT_NODE) &&
(cur->type != XML_XINCLUDE_START) &&
(cur->type != XML_XINCLUDE_END) &&
(cur->type != XML_ENTITY_REF_NODE)) {
@@ -2810,7 +2812,9 @@ xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader) {
reader->faketext = xmlNewDocText(reader->node->doc,
ns->href);
} else {
- if (reader->faketext->content != NULL)
+ if ((reader->faketext->content != NULL) &&
+ (reader->faketext->content !=
+ (xmlChar *) &(reader->faketext->properties)))
xmlFree(reader->faketext->content);
reader->faketext->content = xmlStrdup(ns->href);
}
@@ -4776,6 +4780,12 @@ xmlTextReaderSetup(xmlTextReaderPtr reader,
if (reader == NULL)
return (-1);
+ /*
+ * we force the generation of compact text nodes on the reader
+ * since usr applications should never modify the tree
+ */
+ options |= XML_PARSE_COMPACT;
+
reader->doc = NULL;
reader->entNr = 0;
reader->parserFlags = options;