diff options
author | Xinchen Hui <laruence@php.net> | 2014-05-15 17:45:35 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-05-15 17:45:35 +0800 |
commit | 08663e910759a59c228dd8d1080e055706df072d (patch) | |
tree | cd833b43be7f8bf582f288238a1f251cbe8bd27e | |
parent | d74f5ab3df7d9ed0bf6493aee7078b0e31f36252 (diff) | |
parent | 55b6fb165693d00e46ff20e04d0160754925b9b3 (diff) | |
download | php-git-08663e910759a59c228dd8d1080e055706df072d.tar.gz |
Merge branch 'phpng' of git.php.net:php-src into phpng
-rw-r--r-- | Zend/zend_list.c | 53 | ||||
-rw-r--r-- | Zend/zend_list.h | 11 | ||||
-rw-r--r-- | ext/curl/interface.c | 2 | ||||
-rw-r--r-- | ext/date/php_date.c | 2 | ||||
-rw-r--r-- | ext/libxml/libxml.c | 8 | ||||
-rw-r--r-- | ext/soap/php_encoding.c | 9 | ||||
-rw-r--r-- | ext/soap/php_packet_soap.c | 10 | ||||
-rw-r--r-- | ext/soap/php_soap.h | 4 | ||||
-rw-r--r-- | ext/soap/soap.c | 106 | ||||
-rw-r--r-- | ext/standard/basic_functions.c | 4 | ||||
-rw-r--r-- | ext/standard/link_win32.c | 2 | ||||
-rw-r--r-- | ext/standard/var.c | 3 | ||||
-rw-r--r-- | ext/wddx/wddx.c | 2 | ||||
-rw-r--r-- | main/main.c | 4 | ||||
-rw-r--r-- | win32/wsyslog.c | 4 |
15 files changed, 91 insertions, 133 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c index 7ebe9c13a7..41565408ba 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -68,18 +68,8 @@ static void zend_resource_dtor(zend_resource *res TSRMLS_DC) ld = zend_hash_index_find_ptr(&list_destructors, res->type); if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->list_dtor) { - (ld->list_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->list_dtor_ex) { - ld->list_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (ld->list_dtor_ex) { + ld->list_dtor_ex(res TSRMLS_CC); } } else { zend_error(E_WARNING,"Unknown list entry type (%d)", res->type); @@ -192,18 +182,8 @@ void plist_entry_destructor(zval *zv) ld = zend_hash_index_find_ptr(&list_destructors, res->type); if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->plist_dtor) { - (ld->plist_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->plist_dtor_ex) { - ld->plist_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (ld->plist_dtor_ex) { + ld->plist_dtor_ex(res TSRMLS_CC); } } else { zend_error(E_WARNING,"Unknown list entry type (%d)", res->type); @@ -276,41 +256,16 @@ void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC) } -ZEND_API int zend_register_list_destructors(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number) -{ - zend_rsrc_list_dtors_entry *lde; - zval zv; - - lde = malloc(sizeof(zend_rsrc_list_dtors_entry)); - lde->list_dtor = ld; - lde->plist_dtor = pld; - lde->list_dtor_ex = lde->plist_dtor_ex = NULL; - lde->module_number = module_number; - lde->resource_id = list_destructors.nNextFreeElement; - lde->type = ZEND_RESOURCE_LIST_TYPE_STD; - lde->type_name = NULL; - ZVAL_PTR(&zv, lde); - - if (zend_hash_next_index_insert(&list_destructors, &zv) == NULL) { - return FAILURE; - } - return list_destructors.nNextFreeElement-1; -} - - ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number) { zend_rsrc_list_dtors_entry *lde; zval zv; lde = malloc(sizeof(zend_rsrc_list_dtors_entry)); - lde->list_dtor = NULL; - lde->plist_dtor = NULL; lde->list_dtor_ex = ld; lde->plist_dtor_ex = pld; lde->module_number = module_number; lde->resource_id = list_destructors.nNextFreeElement; - lde->type = ZEND_RESOURCE_LIST_TYPE_EX; lde->type_name = type_name; ZVAL_PTR(&zv, lde); diff --git a/Zend/zend_list.h b/Zend/zend_list.h index c243b0d9ef..f4e7d7b04d 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -27,18 +27,10 @@ BEGIN_EXTERN_C() -#define ZEND_RESOURCE_LIST_TYPE_STD 1 -#define ZEND_RESOURCE_LIST_TYPE_EX 2 - typedef void (*rsrc_dtor_func_t)(zend_resource *res TSRMLS_DC); #define ZEND_RSRC_DTOR_FUNC(name) void name(zend_resource *res TSRMLS_DC) typedef struct _zend_rsrc_list_dtors_entry { - /* old style destructors */ - void (*list_dtor)(zend_resource *); - void (*plist_dtor)(zend_resource *); - - /* new style destructors */ rsrc_dtor_func_t list_dtor_ex; rsrc_dtor_func_t plist_dtor_ex; @@ -46,12 +38,9 @@ typedef struct _zend_rsrc_list_dtors_entry { int module_number; int resource_id; - unsigned char type; } zend_rsrc_list_dtors_entry; -#define register_list_destructors(ld, pld) zend_register_list_destructors(ld, pld, module_number); -ZEND_API int zend_register_list_destructors(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number); ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number); void list_entry_destructor(zval *ptr); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 15e6133fe8..173502877e 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -157,7 +157,7 @@ static void _php_curl_close(zend_resource *rsrc TSRMLS_DC); #define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s) - 1, (long) v); #define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s) - 1, (double) v); #define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s) - 1, (char *) (v ? v : "")); -#define CAASTR(s, v) add_assoc_str_ex(return_value, s, sizeof(s) - 1, v? v : ""); +#define CAASTR(s, v) add_assoc_str_ex(return_value, s, sizeof(s) - 1, v ? v : STR_EMPTY_ALLOC()); #define CAAZ(s, v) add_assoc_zval_ex(return_value, s, sizeof(s) -1 , (zval *) v); #if defined(PHP_WIN32) || defined(__GNUC__) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 31cb41adfd..3d203eb227 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1694,7 +1694,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) /* VS2012 strftime() returns number of characters, not bytes. See VC++11 bug id 766205. */ if (real_len > 0) { - real_len = strlen(buf); + real_len = buf->len; } #endif diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 47bc5caae3..8fd661c81d 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -765,8 +765,12 @@ PHP_LIBXML_API void php_libxml_shutdown(void) PHP_LIBXML_API void php_libxml_switch_context(zval *context, zval *oldcontext TSRMLS_DC) { - ZVAL_COPY_VALUE(oldcontext, &LIBXML(stream_context)); - ZVAL_COPY_VALUE(&LIBXML(stream_context), context); + if (oldcontext) { + ZVAL_COPY_VALUE(oldcontext, &LIBXML(stream_context)); + } + if (context) { + ZVAL_COPY_VALUE(&LIBXML(stream_context), context); + } } static PHP_MINIT_FUNCTION(libxml) diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 071c0fd3e1..9afaa51b9c 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1191,8 +1191,8 @@ static void set_zval_property(zval* object, char* name, zval* val TSRMLS_DC) old_scope = EG(scope); EG(scope) = Z_OBJCE_P(object); - Z_DELREF_P(val); add_property_zval(object, name, val); + if (Z_REFCOUNTED_P(val)) Z_DELREF_P(val); EG(scope) = old_scope; } @@ -1203,12 +1203,10 @@ static zval* get_zval_property(zval* object, char* name, zval *rv TSRMLS_DC) zval *data; zend_class_entry *old_scope; -//??? INIT_PZVAL(&member); -//??? ZVAL_STRING(&member, name, 0); ZVAL_STRING(&member, name); old_scope = EG(scope); EG(scope) = Z_OBJCE_P(object); - data = Z_OBJ_HT_P(object)->read_property(object, &member, BP_VAR_IS, 0, &rv TSRMLS_CC); + data = Z_OBJ_HT_P(object)->read_property(object, &member, BP_VAR_IS, -1, &rv TSRMLS_CC); if (data == &EG(uninitialized_zval)) { /* Hack for bug #32455 */ zend_property_info *property_info; @@ -1216,10 +1214,13 @@ static zval* get_zval_property(zval* object, char* name, zval *rv TSRMLS_DC) property_info = zend_get_property_info(Z_OBJCE_P(object), &member, 1 TSRMLS_CC); EG(scope) = old_scope; if (property_info && zend_hash_exists(Z_OBJPROP_P(object), property_info->name)) { + zval_ptr_dtor(&member); return data; } + zval_ptr_dtor(&member); return NULL; } + zval_ptr_dtor(&member); EG(scope) = old_scope; return data; } else if (Z_TYPE_P(object) == IS_ARRAY) { diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c index ce505b4333..218dadbfc8 100644 --- a/ext/soap/php_packet_soap.c +++ b/ext/soap/php_packet_soap.c @@ -380,9 +380,13 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction zend_hash_internal_pointer_reset(Z_ARRVAL_P(return_value)); tmp = zend_hash_get_current_data(Z_ARRVAL_P(return_value)); - if (Z_REFCOUNTED_P(tmp)) Z_ADDREF_P(tmp); - zval_dtor(return_value); - ZVAL_COPY_VALUE(return_value, tmp); + if (!Z_REFCOUNTED_P(return_value)) { + ZVAL_COPY(return_value, tmp); + } else { + zend_refcounted *garbage = Z_COUNTED_P(return_value); + ZVAL_COPY(return_value, tmp); + _zval_dtor_func(garbage ZEND_FILE_LINE_CC); + } } } diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h index 9b9a7efbd5..d721af6234 100644 --- a/ext/soap/php_soap.h +++ b/ext/soap/php_soap.h @@ -166,7 +166,7 @@ ZEND_BEGIN_MODULE_GLOBALS(soap) sdlPtr sdl; zend_bool use_soap_error_handler; char* error_code; - zval* error_object; + zval error_object; char cache; char cache_mode; char cache_enabled; @@ -200,7 +200,7 @@ ZEND_EXTERN_MODULE_GLOBALS(soap) extern zend_class_entry* soap_var_class_entry; -zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); +void add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); #define soap_error0(severity, format) \ php_error(severity, "SOAP-ERROR: " format) diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 0c1521282a..937d50b15d 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -51,6 +51,7 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level); static void clear_soap_fault(zval *obj TSRMLS_DC); static void set_soap_fault(zval *obj, char *fault_code_ns, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail, char *name TSRMLS_DC); +static void add_soap_fault_ex(zval *fault, zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); static void soap_server_fault(char* code, char* string, char *actor, zval* details, char *name TSRMLS_DC); static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeader* hdr TSRMLS_DC); @@ -73,22 +74,22 @@ static void soap_error_handler(int error_num, const char *error_filename, const #define SOAP_SERVER_BEGIN_CODE() \ zend_bool _old_handler = SOAP_GLOBAL(use_soap_error_handler);\ char* _old_error_code = SOAP_GLOBAL(error_code);\ - zval* _old_error_object = SOAP_GLOBAL(error_object);\ + zend_object* _old_error_object = Z_OBJ(SOAP_GLOBAL(error_object));\ int _old_soap_version = SOAP_GLOBAL(soap_version);\ SOAP_GLOBAL(use_soap_error_handler) = 1;\ SOAP_GLOBAL(error_code) = "Server";\ - SOAP_GLOBAL(error_object) = getThis(); + Z_OBJ(SOAP_GLOBAL(error_object)) = Z_OBJ(EG(This)); #define SOAP_SERVER_END_CODE() \ SOAP_GLOBAL(use_soap_error_handler) = _old_handler;\ SOAP_GLOBAL(error_code) = _old_error_code;\ - SOAP_GLOBAL(error_object) = _old_error_object;\ + Z_OBJ(SOAP_GLOBAL(error_object)) = _old_error_object;\ SOAP_GLOBAL(soap_version) = _old_soap_version; #define SOAP_CLIENT_BEGIN_CODE() \ zend_bool _old_handler = SOAP_GLOBAL(use_soap_error_handler);\ char* _old_error_code = SOAP_GLOBAL(error_code);\ - zval* _old_error_object = SOAP_GLOBAL(error_object);\ + zend_object* _old_error_object = Z_OBJ(SOAP_GLOBAL(error_object));\ int _old_soap_version = SOAP_GLOBAL(soap_version);\ zend_bool _old_in_compilation = CG(in_compilation); \ zend_bool _old_in_execution = EG(in_execution); \ @@ -97,7 +98,7 @@ static void soap_error_handler(int error_num, const char *error_filename, const int _bailout = 0;\ SOAP_GLOBAL(use_soap_error_handler) = 1;\ SOAP_GLOBAL(error_code) = "Client";\ - SOAP_GLOBAL(error_object) = getThis();\ + Z_OBJ(SOAP_GLOBAL(error_object)) = Z_OBJ(EG(This));\ zend_try { #define SOAP_CLIENT_END_CODE() \ @@ -122,7 +123,7 @@ static void soap_error_handler(int error_num, const char *error_filename, const } zend_end_try();\ SOAP_GLOBAL(use_soap_error_handler) = _old_handler;\ SOAP_GLOBAL(error_code) = _old_error_code;\ - SOAP_GLOBAL(error_object) = _old_error_object;\ + Z_OBJ(SOAP_GLOBAL(error_object)) = _old_error_object;\ SOAP_GLOBAL(soap_version) = _old_soap_version;\ if (_bailout) {\ zend_bailout();\ @@ -556,13 +557,12 @@ static void php_soap_prepare_globals() } while (defaultEncoding[i].details.type != END_KNOWN_TYPES); /* hash by namespace */ -//??? change _mem into _ptr - zend_hash_str_add_mem(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE)-1, XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1, XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE)-1, XSI_NS_PREFIX, sizeof(XSI_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE)-1, XML_NS_PREFIX, sizeof(XML_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1, SOAP_1_1_ENC_NS_PREFIX, sizeof(SOAP_1_1_ENC_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1, SOAP_1_2_ENC_NS_PREFIX, sizeof(SOAP_1_2_ENC_NS_PREFIX)); + zend_hash_str_add_ptr(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE)-1, XSD_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1, XSD_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE)-1, XSI_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE)-1, XML_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1, SOAP_1_1_ENC_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1, SOAP_1_2_ENC_NS_PREFIX); } static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC) @@ -573,7 +573,7 @@ static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC) soap_globals->typemap = NULL; soap_globals->use_soap_error_handler = 0; soap_globals->error_code = NULL; - soap_globals->error_object = NULL; + ZVAL_OBJ(&soap_globals->error_object, NULL); soap_globals->sdl = NULL; soap_globals->soap_version = SOAP_1_1; soap_globals->mem_cache = NULL; @@ -599,7 +599,7 @@ PHP_RINIT_FUNCTION(soap) SOAP_GLOBAL(typemap) = NULL; SOAP_GLOBAL(use_soap_error_handler) = 0; SOAP_GLOBAL(error_code) = NULL; - SOAP_GLOBAL(error_object) = NULL; + ZVAL_OBJ(&SOAP_GLOBAL(error_object), NULL); SOAP_GLOBAL(sdl) = NULL; SOAP_GLOBAL(soap_version) = SOAP_1_1; SOAP_GLOBAL(encoding) = NULL; @@ -609,22 +609,22 @@ PHP_RINIT_FUNCTION(soap) return SUCCESS; } -static void delete_sdl_res(zend_resource *res) +static void delete_sdl_res(zend_resource *res TSRMLS_CC) { delete_sdl(res->ptr); } -static void delete_url_res(zend_resource *res) +static void delete_url_res(zend_resource *res TSRMLS_CC) { delete_url(res->ptr); } -static void delete_service_res(zend_resource *res) +static void delete_service_res(zend_resource *res TSRMLS_CC) { delete_service(res->ptr); } -static void delete_hashtable_res(zend_resource *res) +static void delete_hashtable_res(zend_resource *res TSRMLS_CC) { delete_hashtable(res->ptr); } @@ -677,10 +677,10 @@ PHP_MINIT_FUNCTION(soap) INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions); soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC); - le_sdl = register_list_destructors(delete_sdl_res, NULL); - le_url = register_list_destructors(delete_url_res, NULL); - le_service = register_list_destructors(delete_service_res, NULL); - le_typemap = register_list_destructors(delete_hashtable_res, NULL); + le_sdl = zend_register_list_destructors_ex(delete_sdl_res, NULL, "SOAP SDL", module_number); + le_url = zend_register_list_destructors_ex(delete_url_res, NULL, "SOAP URL", module_number); + le_service = zend_register_list_destructors_ex(delete_service_res, NULL, "SOAP service", module_number); + le_typemap = zend_register_list_destructors_ex(delete_hashtable_res, NULL, "SOAP table", module_number); REGISTER_LONG_CONSTANT("SOAP_1_1", SOAP_1_1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SOAP_1_2", SOAP_1_2, CONST_CS | CONST_PERSISTENT); @@ -1311,10 +1311,6 @@ PHP_METHOD(SoapServer, setClass) return; } - if (argv) { - efree(argv); - } - SOAP_SERVER_END_CODE(); } /* }}} */ @@ -2081,6 +2077,7 @@ static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeade use_http_error_status = 0; } } + STR_RELEASE(server); /* Want to return HTTP 500 but apache wants to over write our fault code with their own handling... Figure this out later @@ -2137,13 +2134,12 @@ static void soap_error_handler(int error_num, const char *error_filename, const return; } - if (SOAP_GLOBAL(error_object) && - Z_TYPE_P(SOAP_GLOBAL(error_object)) == IS_OBJECT && - instanceof_function(Z_OBJCE_P(SOAP_GLOBAL(error_object)), soap_class_entry TSRMLS_CC)) { + if (Z_OBJ(SOAP_GLOBAL(error_object)) && + instanceof_function(Z_OBJCE(SOAP_GLOBAL(error_object)), soap_class_entry TSRMLS_CC)) { zval *tmp; int use_exceptions = 0; - if ((tmp = zend_hash_str_find(Z_OBJPROP_P(SOAP_GLOBAL(error_object)), "_exceptions", sizeof("_exceptions")-1)) == NULL || + if ((tmp = zend_hash_str_find(Z_OBJPROP(SOAP_GLOBAL(error_object)), "_exceptions", sizeof("_exceptions")-1)) == NULL || Z_TYPE_P(tmp) != IS_FALSE) { use_exceptions = 1; } @@ -2154,7 +2150,7 @@ static void soap_error_handler(int error_num, const char *error_filename, const error_num == E_ERROR || error_num == E_PARSE) && use_exceptions) { - zval *fault; + zval fault; char* code = SOAP_GLOBAL(error_code); char buffer[1024]; int buffer_len; @@ -2182,9 +2178,9 @@ static void soap_error_handler(int error_num, const char *error_filename, const if (code == NULL) { code = "Client"; } - fault = add_soap_fault(SOAP_GLOBAL(error_object), code, buffer, NULL, NULL TSRMLS_CC); - Z_ADDREF_P(fault); - zend_throw_exception_object(fault TSRMLS_CC); + add_soap_fault_ex(&fault, &SOAP_GLOBAL(error_object), code, buffer, NULL, NULL TSRMLS_CC); + Z_ADDREF(fault); + zend_throw_exception_object(&fault TSRMLS_CC); //??? old_objects = EG(objects_store).object_buckets; //??? EG(objects_store).object_buckets = NULL; @@ -2235,10 +2231,9 @@ static void soap_error_handler(int error_num, const char *error_filename, const if (code == NULL) { code = "Server"; } - if (SOAP_GLOBAL(error_object) && - Z_TYPE_P(SOAP_GLOBAL(error_object)) == IS_OBJECT && - instanceof_function(Z_OBJCE_P(SOAP_GLOBAL(error_object)), soap_server_class_entry TSRMLS_CC) && - (tmp = zend_hash_str_find(Z_OBJPROP_P(SOAP_GLOBAL(error_object)), "service", sizeof("service")-1)) != NULL && + if (Z_OBJ(SOAP_GLOBAL(error_object)) && + instanceof_function(Z_OBJCE(SOAP_GLOBAL(error_object)), soap_server_class_entry TSRMLS_CC) && + (tmp = zend_hash_str_find(Z_OBJPROP(SOAP_GLOBAL(error_object)), "service", sizeof("service")-1)) != NULL && (service = (soapServicePtr)zend_fetch_resource(tmp TSRMLS_CC, -1, "service", NULL, 1, le_service)) && !service->send_errors) { strcpy(buffer, "Internal Error"); @@ -2267,6 +2262,7 @@ static void soap_error_handler(int error_num, const char *error_filename, const php_output_discard(TSRMLS_C); } + ZVAL_NULL(&fault_obj); set_soap_fault(&fault_obj, NULL, code, buffer, NULL, &outbuf, NULL TSRMLS_CC); fault = 1; } @@ -2782,7 +2778,7 @@ static void do_soap_call(zval* this_ptr, if ((fault = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault")-1)) != NULL) { ZVAL_COPY(return_value, fault); } else { - ZVAL_COPY(return_value, add_soap_fault(this_ptr, "Client", "Unknown Error", NULL, NULL TSRMLS_CC)); + add_soap_fault_ex(return_value, this_ptr, "Client", "Unknown Error", NULL, NULL TSRMLS_CC); } } else { zval* fault; @@ -2850,7 +2846,6 @@ PHP_METHOD(SoapClient, __call) zval *tmp; zend_bool free_soap_headers = 0; zval *this_ptr; -//??? HashPosition pos; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|a!zz", &function, &function_len, &args, &options, &headers, &output_headers) == FAILURE) { @@ -3213,16 +3208,22 @@ static void clear_soap_fault(zval *obj TSRMLS_DC) } } -zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC) +static void add_soap_fault_ex(zval *fault, zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC) +{ + ZVAL_NULL(fault); + set_soap_fault(fault, NULL, fault_code, fault_string, fault_actor, fault_detail, NULL TSRMLS_CC); + add_property_zval(obj, "__soap_fault", fault); + Z_DELREF_P(fault); +} + +void add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC) { zval fault; + ZVAL_NULL(&fault); set_soap_fault(&fault, NULL, fault_code, fault_string, fault_actor, fault_detail, NULL TSRMLS_CC); add_property_zval(obj, "__soap_fault", &fault); Z_DELREF(fault); -//??? FIXME -// return &fault; - return NULL; } static void set_soap_fault(zval *obj, char *fault_code_ns, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail, char *name TSRMLS_DC) @@ -3270,7 +3271,7 @@ static void set_soap_fault(zval *obj, char *fault_code_ns, char *fault_code, cha if (fault_actor != NULL) { add_property_string(obj, "faultactor", fault_actor); } - if (fault_detail != NULL) { + if (fault_detail != NULL && Z_TYPE_P(fault_detail) != IS_UNDEF) { add_property_zval(obj, "detail", fault_detail); } if (name != NULL) { @@ -3298,7 +3299,7 @@ static void deserialize_parameters(xmlNodePtr params, sdlFunctionPtr function, i } } ZEND_HASH_FOREACH_END(); if (use_names) { - tmp_parameters = safe_emalloc(num_of_params, sizeof(zval *), 0); + tmp_parameters = safe_emalloc(num_of_params, sizeof(zval), 0); ZEND_HASH_FOREACH_PTR(function->requestParameters, param) { val = get_node(params, param->paramName); if (!val) { @@ -3336,7 +3337,7 @@ static void deserialize_parameters(xmlNodePtr params, sdlFunctionPtr function, i strcmp((char *)params->name, function->functionName) == 0) { num_of_params = 0; } else if (num_of_params > 0) { - tmp_parameters = safe_emalloc(num_of_params, sizeof(zval *), 0); + tmp_parameters = safe_emalloc(num_of_params, sizeof(zval), 0); trav = params; while (trav != 0 && cur_param < num_of_params) { @@ -4616,8 +4617,9 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) for (i = 0;i < level;i++) { smart_str_appendc(&spaces, ' '); } - smart_str_appendl(buf, spaces.s->val, spaces.s->len); - + if (spaces.s) { + smart_str_appendl(buf, spaces.s->val, spaces.s->len); + } switch (type->kind) { case XSD_TYPEKIND_SIMPLE: if (type->encode) { @@ -4760,7 +4762,9 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) smart_str_appendl(buf, ";\n", 2); } ZEND_HASH_FOREACH_END(); } - smart_str_appendl(buf, spaces.s->val, spaces.s->len); + if (spaces.s) { + smart_str_appendl(buf, spaces.s->val, spaces.s->len); + } smart_str_appendc(buf, '}'); } break; diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index ef516efad4..8419dfe76f 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4019,7 +4019,9 @@ PHP_FUNCTION(getenv) efree(ptr); RETURN_EMPTY_STRING(); } else { - RETURN_STRING(ptr, 0); + RETVAL_STRING(ptr); + efree(ptr); + return; } } #else diff --git a/ext/standard/link_win32.c b/ext/standard/link_win32.c index d410d223fb..41ce9d20df 100644 --- a/ext/standard/link_win32.c +++ b/ext/standard/link_win32.c @@ -78,7 +78,7 @@ PHP_FUNCTION(readlink) php_error_docref(NULL TSRMLS_CC, E_WARNING, "readlink failed to read the symbolic link (%s), error %d)", link, GetLastError()); RETURN_FALSE; } - RETURN_STRING(target, 1); + RETURN_STRING(target); } /* }}} */ diff --git a/ext/standard/var.c b/ext/standard/var.c index b2e11bc9fc..8cba814f5e 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -72,7 +72,7 @@ static int php_array_element_dump(zval *zv TSRMLS_DC, int num_args, va_list args php_printf("%*c[\"", level + 1, ' '); PHPWRITE(hash_key->key->val, hash_key->key->len); php_printf("\"]=>\n"); - } + } php_var_dump(zv, level + 2 TSRMLS_CC); return 0; } @@ -722,7 +722,6 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt zend_string *key; zval *d, *name; ulong index; - int i; zval nval, *nvalp; HashTable *propers, *ht; diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index 8b46910152..3b4357ae36 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -708,7 +708,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X { st_entry ent; wddx_stack *stack = (wddx_stack *)user_data; - + TSRMLS_FETCH(); if (!strcmp((char *)name, EL_PACKET)) { int i; diff --git a/main/main.c b/main/main.c index 87e0b39c6c..0e17be81f9 100644 --- a/main/main.c +++ b/main/main.c @@ -135,7 +135,7 @@ static php_win32_disable_functions(TSRMLS_D) if (EG(windows_version_info).dwMajorVersion < 5) { for (i = 0; i < function_name_cnt_5; i++) { - if (zend_hash_del(CG(function_table), function_name_5[i], strlen(function_name_5[i]) + 1)==FAILURE) { + if (zend_hash_str_del(CG(function_table), function_name_5[i], strlen(function_name_5[i]))==FAILURE) { php_printf("Unable to disable function '%s'\n", function_name_5[i]); return FAILURE; } @@ -144,7 +144,7 @@ static php_win32_disable_functions(TSRMLS_D) if (EG(windows_version_info).dwMajorVersion < 6) { for (i = 0; i < function_name_cnt_6; i++) { - if (zend_hash_del(CG(function_table), function_name_6[i], strlen(function_name_6[i]) + 1)==FAILURE) { + if (zend_hash_str_del(CG(function_table), function_name_6[i], strlen(function_name_6[i]))==FAILURE) { php_printf("Unable to disable function '%s'\n", function_name_6[i]); return FAILURE; } diff --git a/win32/wsyslog.c b/win32/wsyslog.c index 4266079e13..75c5ef58e5 100644 --- a/win32/wsyslog.c +++ b/win32/wsyslog.c @@ -67,7 +67,7 @@ void closelog(void) PW32G(log_source) = NULL; } if (PW32G(log_header)) { - STR_FREE(PW32G(log_header)); + efree(PW32G(log_header)); PW32G(log_header) = NULL; } } @@ -129,7 +129,7 @@ void openlog(const char *ident, int logopt, int facility) closelog(); } - STR_FREE(PW32G(log_header)); + efree(PW32G(log_header)); PW32G(log_source) = RegisterEventSource(NULL, "PHP-" PHP_VERSION); spprintf(&PW32G(log_header), 0, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid()); |