diff options
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r-- | ext/xmlreader/php_xmlreader.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 2cf7109011..191f878c91 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -776,22 +776,17 @@ PHP_METHOD(xmlreader, next) id = getThis(); intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern != NULL && intern->ptr != NULL) { +#if LIBXML_VERSION <= 20617 + /* Bug in libxml prevents a next in certain cases when positioned on end of element */ + if (xmlTextReaderNodeType(intern->ptr) == XML_READER_TYPE_END_ELEMENT) { + retval = xmlTextReaderRead(intern->ptr); + } else +#endif retval = xmlTextReaderNext(intern->ptr); while (name != NULL && retval == 1) { -#ifdef PHP_WIN32 - /* xmlTextReaderConstLocalName should be used once its added to win def libxml.def file. - Doing so will not require localname to be freed as its not allocated */ - xmlChar *localname = xmlTextReaderLocalName(intern->ptr); - if (xmlStrEqual(localname, name)) { - xmlFree(localname); - RETURN_TRUE; - } - xmlFree(localname); -#else if (xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), name)) { RETURN_TRUE; } -#endif retval = xmlTextReaderNext(intern->ptr); } if (retval == -1) { |