summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-05-15 17:45:35 +0800
committerXinchen Hui <laruence@php.net>2014-05-15 17:45:35 +0800
commit08663e910759a59c228dd8d1080e055706df072d (patch)
treecd833b43be7f8bf582f288238a1f251cbe8bd27e
parentd74f5ab3df7d9ed0bf6493aee7078b0e31f36252 (diff)
parent55b6fb165693d00e46ff20e04d0160754925b9b3 (diff)
downloadphp-git-08663e910759a59c228dd8d1080e055706df072d.tar.gz
Merge branch 'phpng' of git.php.net:php-src into phpng
-rw-r--r--Zend/zend_list.c53
-rw-r--r--Zend/zend_list.h11
-rw-r--r--ext/curl/interface.c2
-rw-r--r--ext/date/php_date.c2
-rw-r--r--ext/libxml/libxml.c8
-rw-r--r--ext/soap/php_encoding.c9
-rw-r--r--ext/soap/php_packet_soap.c10
-rw-r--r--ext/soap/php_soap.h4
-rw-r--r--ext/soap/soap.c106
-rw-r--r--ext/standard/basic_functions.c4
-rw-r--r--ext/standard/link_win32.c2
-rw-r--r--ext/standard/var.c3
-rw-r--r--ext/wddx/wddx.c2
-rw-r--r--main/main.c4
-rw-r--r--win32/wsyslog.c4
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());