diff options
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r-- | ext/xmlreader/php_xmlreader.c | 82 |
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 - */ |