diff options
| author | Xinchen Hui <laruence@php.net> | 2014-05-16 22:02:19 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@php.net> | 2014-05-16 22:02:19 +0800 |
| commit | bcb4fcd305962b6b382d97e435b474c4c74d24aa (patch) | |
| tree | ea33a06fa6816bcf84393232893a764659751373 | |
| parent | 8b7a3b2d05c26c49fca64ac7d6752a4de31e4cdf (diff) | |
| parent | 89dbe074496dcb33484c207347702e51589de943 (diff) | |
| download | php-git-bcb4fcd305962b6b382d97e435b474c4c74d24aa.tar.gz | |
Merge branch 'phpng' of git.php.net:php-src into phpng
| -rw-r--r-- | Zend/zend_object_handlers.c | 2 | ||||
| -rw-r--r-- | ext/phar/stream.c | 4 | ||||
| -rw-r--r-- | ext/soap/php_encoding.c | 45 |
3 files changed, 22 insertions, 29 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 2459746892..a23fc42635 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1091,7 +1091,7 @@ static union _zend_function *zend_std_get_method(zend_object **obj_ptr, zend_str if (EG(scope) && is_derived_class(fbc->common.scope, EG(scope)) && fbc->op_array.fn_flags & ZEND_ACC_CHANGED) { - if ((func = zend_hash_find(&EG(scope)->function_table, lc_method_name)) != SUCCESS) { + if ((func = zend_hash_find(&EG(scope)->function_table, lc_method_name)) == NULL) { zend_function *priv_fbc = Z_FUNC_P(func); if (priv_fbc->common.fn_flags & ZEND_ACC_PRIVATE && priv_fbc->common.scope == EG(scope)) { diff --git a/ext/phar/stream.c b/ext/phar/stream.c index 44ee853f65..51726999e2 100644 --- a/ext/phar/stream.c +++ b/ext/phar/stream.c @@ -677,7 +677,7 @@ static int phar_wrapper_unlink(php_stream_wrapper *wrapper, const char *url, int char *internal_file, *error; int internal_file_len; phar_entry_data *idata; - phar_archive_data **pphar; + phar_archive_data *pphar; uint host_len; if ((resource = phar_parse_url(wrapper, url, "rb", options TSRMLS_CC)) == NULL) { @@ -702,7 +702,7 @@ static int phar_wrapper_unlink(php_stream_wrapper *wrapper, const char *url, int phar_request_initialize(TSRMLS_C); pphar = zend_hash_str_find_ptr(&(PHAR_GLOBALS->phar_fname_map), resource->host, host_len); - if (PHAR_G(readonly) && (!pphar || !(*pphar)->is_data)) { + if (PHAR_G(readonly) && (!pphar || !pphar->is_data)) { php_url_free(resource); php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: write operations disabled by the php.ini setting phar.readonly"); return 0; diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 1227ebba98..795a376f3d 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -350,41 +350,32 @@ static zend_bool soap_check_zval_ref(zval *data, xmlNodePtr node TSRMLS_DC) { return 0; } -static zval* soap_find_xml_ref(xmlNodePtr node TSRMLS_DC) -{ - zval *data_ptr; - - if (SOAP_GLOBAL(ref_map) && - (data_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) { -//??? Z_SET_ISREF_PP(data_ptr); - SEPARATE_ZVAL_TO_MAKE_IS_REF(data_ptr); - Z_ADDREF_P(data_ptr); - return data_ptr; - } - return NULL; -} - static zend_bool soap_check_xml_ref(zval *data, xmlNodePtr node TSRMLS_DC) { zval *data_ptr; if (SOAP_GLOBAL(ref_map)) { - if ((data_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) { - if (data != data_ptr) { + if ((data_ptr = zend_hash_index_find(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) { + if (!Z_REFCOUNTED_P(data) || + !Z_REFCOUNTED_P(data_ptr) || + Z_COUNTED_P(data) != Z_COUNTED_P(data_ptr)) { zval_ptr_dtor(data); - ZVAL_COPY_VALUE(data, data_ptr); -//??? Z_SET_ISREF_PP(data); - SEPARATE_ZVAL_TO_MAKE_IS_REF(data); - Z_ADDREF_P(data); +//??? SEPARATE_ZVAL_TO_MAKE_IS_REF(data_ptr); + ZVAL_COPY(data, data_ptr); return 1; } - } else { - zend_hash_index_update_ptr(SOAP_GLOBAL(ref_map), (ulong)node, data); } } return 0; } +static zend_bool soap_add_xml_ref(zval *data, xmlNodePtr node TSRMLS_DC) +{ + if (SOAP_GLOBAL(ref_map)) { + zend_hash_index_update(SOAP_GLOBAL(ref_map), (ulong)node, data); + } +} + static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xmlNodePtr parent, int check_class_map TSRMLS_DC) { xmlNodePtr node = NULL; @@ -1475,6 +1466,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z return ret; } object_init_ex(ret, ce); + soap_add_xml_ref(ret, data TSRMLS_CC); } } else if (sdlType->kind == XSD_TYPEKIND_EXTENSION && sdlType->encode && @@ -1484,11 +1476,8 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST && sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) { - zval *ref; - CHECK_XML_NULL(data); - if ((ref = soap_find_xml_ref(data TSRMLS_CC)) != NULL) { - ZVAL_COPY_VALUE(ret, ref); + if (soap_check_xml_ref(ret, data TSRMLS_CC)) { return ret; } @@ -1509,6 +1498,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z return ret; } redo_any = get_zval_property(ret, "any", &rv TSRMLS_CC); + soap_add_xml_ref(ret, data TSRMLS_CC); if (Z_TYPE_P(ret) == IS_OBJECT && ce != ZEND_STANDARD_CLASS_DEF_PTR) { zend_object *zobj = Z_OBJ_P(ret); zobj->ce = ce; @@ -1522,6 +1512,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z } object_init_ex(ret, ce); + soap_add_xml_ref(ret, data TSRMLS_CC); master_to_zval_int(&base, sdlType->encode, data TSRMLS_CC); set_zval_property(ret, "_", &base TSRMLS_CC); } @@ -1532,6 +1523,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z return ret; } object_init_ex(ret, ce); + soap_add_xml_ref(ret, data TSRMLS_CC); } if (sdlType->model) { if (redo_any) { @@ -1588,6 +1580,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z } object_init_ex(ret, ce); + soap_add_xml_ref(ret, data TSRMLS_CC); trav = data->children; while (trav != NULL) { |
