summaryrefslogtreecommitdiff
path: root/ext/xmlreader/php_xmlreader.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r--ext/xmlreader/php_xmlreader.c82
1 files changed, 37 insertions, 45 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index 4d4e7348c9..20960d96d5 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 7 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2018 The PHP Group |
+ | Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -122,7 +122,11 @@ zval *xmlreader_get_property_ptr_ptr(zval *object, zval *member, int type, void
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
+ return NULL;
+ }
+ ZVAL_STR(&tmp_member, str);
member = &tmp_member;
}
@@ -153,7 +157,11 @@ zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
+ return &EG(uninitialized_zval);
+ }
+ ZVAL_STR(&tmp_member, str);
member = &tmp_member;
}
@@ -181,14 +189,18 @@ zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache
/* }}} */
/* {{{ xmlreader_write_property */
-void xmlreader_write_property(zval *object, zval *member, zval *value, void **cache_slot)
+zval *xmlreader_write_property(zval *object, zval *member, zval *value, void **cache_slot)
{
xmlreader_object *obj;
zval tmp_member;
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
+ return value;
+ }
+ ZVAL_STR(&tmp_member, str);
member = &tmp_member;
}
@@ -200,12 +212,14 @@ void xmlreader_write_property(zval *object, zval *member, zval *value, void **ca
if (hnd != NULL) {
php_error_docref(NULL, E_WARNING, "Cannot write to read-only property");
} else {
- zend_std_write_property(object, member, value, cache_slot);
+ value = zend_std_write_property(object, member, value, cache_slot);
}
if (member == &tmp_member) {
zval_ptr_dtor_str(&tmp_member);
}
+
+ return value;
}
/* }}} */
@@ -402,7 +416,7 @@ static void php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_rea
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -424,7 +438,7 @@ static void php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_in
int retval;
xmlreader_object *intern;
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -442,14 +456,13 @@ static void php_xmlreader_free_prop_handler(zval *el) /* {{{ */ {
pefree(Z_PTR_P(el), 1);
} /* }}} */
-#if LIBXML_VERSION >= 20620
/* {{{ php_xmlreader_no_arg_string */
static void php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_char_t internal_function) {
zval *id;
char *retchar = NULL;
xmlreader_object *intern;
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -464,7 +477,6 @@ static void php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAMETERS, xmlreader_
}
}
/* }}} */
-#endif
/* {{{ php_xmlreader_set_relaxng_schema */
static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int type) {
@@ -485,7 +497,7 @@ static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int t
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -528,7 +540,7 @@ PHP_METHOD(xmlreader, close)
zval *id;
xmlreader_object *intern;
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
/* libxml is segfaulting in versions up to 2.6.8 using xmlTextReaderClose so for
now we will free the whole reader when close is called as it would get rebuilt on
@@ -560,7 +572,7 @@ PHP_METHOD(xmlreader, getAttributeNo)
return;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -591,7 +603,7 @@ PHP_METHOD(xmlreader, getAttributeNs)
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -617,7 +629,7 @@ PHP_METHOD(xmlreader, getParserProperty)
return;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -669,7 +681,7 @@ PHP_METHOD(xmlreader, moveToAttribute)
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -697,7 +709,7 @@ PHP_METHOD(xmlreader, moveToAttributeNo)
return;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -731,7 +743,7 @@ PHP_METHOD(xmlreader, moveToAttributeNs)
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -777,7 +789,7 @@ PHP_METHOD(xmlreader, read)
int retval;
xmlreader_object *intern;
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern != NULL && intern->ptr != NULL) {
retval = xmlTextReaderRead(intern->ptr);
@@ -807,15 +819,9 @@ PHP_METHOD(xmlreader, next)
return;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
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) {
if (xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), (xmlChar *)name)) {
@@ -899,7 +905,6 @@ PHP_METHOD(xmlreader, resetState)
}
*/
-#if LIBXML_VERSION >= 20620
/* {{{ proto string XMLReader::readInnerXml()
Reads the contents of the current node, including child nodes and markup. */
PHP_METHOD(xmlreader, readInnerXml)
@@ -944,7 +949,7 @@ PHP_METHOD(xmlreader, setSchema)
RETURN_FALSE;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -965,7 +970,6 @@ PHP_METHOD(xmlreader, setSchema)
#endif
}
/* }}} */
-#endif
/* {{{ proto bool XMLReader::setParserProperty(int property, bool value)
Sets parser property (one of the parser option constants).
@@ -982,7 +986,7 @@ PHP_METHOD(xmlreader, setParserProperty)
return;
}
- id = getThis();
+ id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
if (intern && intern->ptr) {
@@ -1071,9 +1075,7 @@ PHP_METHOD(xmlreader, XML)
reader = xmlNewTextReader(inputbfr, uri);
if (reader != NULL) {
-#if LIBXML_VERSION >= 20628
ret = xmlTextReaderSetup(reader, NULL, uri, encoding, options);
-#endif
if (ret == 0) {
if (id == NULL) {
object_init_ex(return_value, xmlreader_class_entry);
@@ -1117,7 +1119,8 @@ PHP_METHOD(xmlreader, expand)
xmlDocPtr docp = NULL;
php_libxml_node_object *domobj = NULL;
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|O!", &id, xmlreader_class_entry, &basenode, dom_node_class_entry) == FAILURE) {
+ id = ZEND_THIS;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|O!", &basenode, dom_node_class_entry) == FAILURE) {
return;
}
@@ -1271,12 +1274,10 @@ static const zend_function_entry xmlreader_functions[] /* {{{ */ = {
PHP_ME(xmlreader, open, arginfo_xmlreader_open, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
PHP_ME(xmlreader, read, arginfo_xmlreader_read, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, next, arginfo_xmlreader_next, ZEND_ACC_PUBLIC)
-#if LIBXML_VERSION >= 20620
PHP_ME(xmlreader, readInnerXml, arginfo_xmlreader_readInnerXml, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, readOuterXml, arginfo_xmlreader_readOuterXml, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, readString, arginfo_xmlreader_readString, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, setSchema, arginfo_xmlreader_setSchema, ZEND_ACC_PUBLIC)
-#endif
/* Not Yet Implemented though defined in libxml as of 2.6.9dev
PHP_ME(xmlreader, resetState, NULL, ZEND_ACC_PUBLIC)
*/
@@ -1382,12 +1383,3 @@ PHP_MINFO_FUNCTION(xmlreader)
php_info_print_table_end();
}
/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */