From ad4fa8f75810facff8bea509249a735232235443 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 24 Sep 2015 22:39:59 +0300 Subject: Fixed incorrect usage of HASH_OF() macro. Replaced HASH_OF() with more appropriate Z_ARRVAL_P() or Z_OBJPROP_P(). --- ext/soap/php_encoding.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 5d8bf95623..c03d433951 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -3502,7 +3502,7 @@ static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type) i = 0; different = FALSE; cur_type = prev_type = 0; - ht = HASH_OF(array); + ht = Z_ARRVAL_P(array); ZEND_HASH_FOREACH_VAL_IND(ht, tmp) { if (Z_TYPE_P(tmp) == IS_OBJECT && -- cgit v1.2.1 From 4531d2c5913eddbbc38d04be6b2dffec30202887 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 21 Dec 2015 18:12:57 +0800 Subject: Fixed typo --- ext/soap/php_encoding.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index c03d433951..70824152c8 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -2188,9 +2188,8 @@ static void add_xml_array_elements(xmlNodePtr xmlParam, static inline int array_num_elements(HashTable* ht) { if (ht->nNumUsed && - Z_TYPE(ht->arData[ht->nNumUsed-1].val) != IS_UNUSED && + Z_TYPE(ht->arData[ht->nNumUsed-1].val) != IS_UNDEF && ht->arData[ht->nNumUsed-1].key == NULL) { - return ht->arData[ht->nNumUsed-1].h - 1; } return 0; -- cgit v1.2.1 From 49493a2dcfb2cd1758b69b13d9006ead3be0e066 Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Fri, 1 Jan 2016 19:19:27 +0200 Subject: Happy new year (Update copyright to 2016) --- ext/soap/php_encoding.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index c6993b2e28..0f85ddde1b 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2015 The PHP Group | + | Copyright (c) 1997-2016 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 | -- cgit v1.2.1 From c140bbb5dbf76e051205d33911df12bd33b270ca Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Mon, 25 Jan 2016 14:29:51 +0300 Subject: check for NULL and avoid crashes --- ext/soap/php_encoding.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 5d9064af70..1fdc5a8788 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -3014,7 +3014,11 @@ static xmlNodePtr to_xml_list(encodeTypePtr enc, zval *data, int style, xmlNodeP xmlFreeNode(dummy); } ZEND_HASH_FOREACH_END(); smart_str_0(&list); - xmlNodeSetContentLen(ret, BAD_CAST(ZSTR_VAL(list.s)), ZSTR_LEN(list.s)); + if (list.s) { + xmlNodeSetContentLen(ret, BAD_CAST(ZSTR_VAL(list.s)), ZSTR_LEN(list.s)); + } else { + xmlNodeSetContentLen(ret, BAD_CAST(""), 0); + } smart_str_free(&list); } else { zval tmp; @@ -3054,7 +3058,11 @@ static xmlNodePtr to_xml_list(encodeTypePtr enc, zval *data, int style, xmlNodeP start = next; } smart_str_0(&list); - xmlNodeSetContentLen(ret, BAD_CAST(ZSTR_VAL(list.s)), ZSTR_LEN(list.s)); + if (list.s) { + xmlNodeSetContentLen(ret, BAD_CAST(ZSTR_VAL(list.s)), ZSTR_LEN(list.s)); + } else { + xmlNodeSetContentLen(ret, BAD_CAST(""), 0); + } smart_str_free(&list); efree(str); if (data == &tmp) {zval_dtor(&tmp);} -- cgit v1.2.1 From c45f7b97a3252767b31d38fd7e761b9291ed2152 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 8 Apr 2016 17:57:51 +0800 Subject: Fixed bug #71986 (Nested foreach assign-by-reference creates broken variables) --- ext/soap/php_encoding.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 1fdc5a8788..fc389f2365 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -3512,6 +3512,7 @@ static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type) ht = Z_ARRVAL_P(array); ZEND_HASH_FOREACH_VAL_IND(ht, tmp) { + ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_OBJECT && Z_OBJCE_P(tmp) == soap_var_class_entry) { zval *ztype; -- cgit v1.2.1 From 6499162ff0d8aa6e862d3e3cdd2288b87636b8a1 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 28 Apr 2016 04:13:34 +0300 Subject: - get rid of EG(scope). zend_get_executed_scope() should be used instead. - ichanged zval_update_constant_ex(). Use IS_TYPE_IMMUTABLE flag on shared constants and AST, instead of "inline_change" parameter. --- ext/soap/php_encoding.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index fc389f2365..803a5cd596 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1164,13 +1164,8 @@ static xmlNodePtr to_xml_null(encodeTypePtr type, zval *data, int style, xmlNode static void set_zval_property(zval* object, char* name, zval* val) { - zend_class_entry *old_scope; - - old_scope = EG(scope); - EG(scope) = Z_OBJCE_P(object); - add_property_zval(object, name, val); + zend_update_property(Z_OBJCE_P(object), object, name, strlen(name), val); if (Z_REFCOUNTED_P(val)) Z_DELREF_P(val); - EG(scope) = old_scope; } static zval* get_zval_property(zval* object, char* name, zval *rv) @@ -1181,15 +1176,15 @@ static zval* get_zval_property(zval* object, char* name, zval *rv) zend_class_entry *old_scope; ZVAL_STRING(&member, name); - old_scope = EG(scope); - EG(scope) = Z_OBJCE_P(object); + old_scope = EG(fake_scope); + EG(fake_scope) = Z_OBJCE_P(object); data = Z_OBJ_HT_P(object)->read_property(object, &member, BP_VAR_IS, NULL, rv); if (data == &EG(uninitialized_zval)) { /* Hack for bug #32455 */ zend_property_info *property_info; property_info = zend_get_property_info(Z_OBJCE_P(object), Z_STR(member), 1); - EG(scope) = old_scope; + EG(fake_scope) = old_scope; if (property_info != ZEND_WRONG_PROPERTY_INFO && property_info && zend_hash_exists(Z_OBJPROP_P(object), property_info->name)) { zval_ptr_dtor(&member); @@ -1199,7 +1194,7 @@ static zval* get_zval_property(zval* object, char* name, zval *rv) return NULL; } zval_ptr_dtor(&member); - EG(scope) = old_scope; + EG(fake_scope) = old_scope; return data; } else if (Z_TYPE_P(object) == IS_ARRAY) { zval *data_ptr; @@ -1218,10 +1213,10 @@ static void unset_zval_property(zval* object, char* name) zend_class_entry *old_scope; ZVAL_STRING(&member, name); - old_scope = EG(scope); - EG(scope) = Z_OBJCE_P(object); + old_scope = EG(fake_scope); + EG(fake_scope) = Z_OBJCE_P(object); Z_OBJ_HT_P(object)->unset_property(object, &member, NULL); - EG(scope) = old_scope; + EG(fake_scope) = old_scope; zval_ptr_dtor(&member); } else if (Z_TYPE_P(object) == IS_ARRAY) { zend_hash_str_del(Z_ARRVAL_P(object), name, strlen(name)); -- cgit v1.2.1