From 50484b59cd4ff5a1d32ce520fc7a7181b25ed0d9 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 20 Aug 2021 13:10:58 +0200 Subject: [PATCH] Move derefs into accessor macros These derefs are mostly there to be defensive, but clutter the code somewhat. Move them directly into the access macros. --- ext/soap/php_encoding.c | 14 +----- ext/soap/php_encoding.h | 12 ++--- ext/soap/php_http.c | 37 ++------------- ext/soap/php_sdl.c | 3 -- ext/soap/php_soap.h | 79 +++++++++++++++++--------------- ext/soap/soap.c | 99 ++++++++++++----------------------------- 6 files changed, 83 insertions(+), 161 deletions(-) diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 01175aa7b16..3a4626aa5be 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -383,16 +383,13 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xml encodePtr enc = NULL; zval *ztype = Z_VAR_ENC_TYPE_P(data); - ZVAL_DEREF(ztype); if (Z_TYPE_P(ztype) != IS_LONG) { soap_error0(E_ERROR, "Encoding: SoapVar has no 'enc_type' property"); } zval *zstype = Z_VAR_ENC_STYPE_P(data); - ZVAL_DEREF(zstype); if (Z_TYPE_P(zstype) == IS_STRING) { zval *zns = Z_VAR_ENC_NS_P(data); - ZVAL_DEREF(zns); if (Z_TYPE_P(zns) == IS_STRING) { enc = get_encoder(SOAP_GLOBAL(sdl), Z_STRVAL_P(zns), Z_STRVAL_P(zstype)); } else { @@ -419,16 +416,12 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xml enc = encode; } - zval *zdata = Z_VAR_ENC_VALUE_P(data); - ZVAL_DEREF(zdata); - node = master_to_xml(enc, zdata, style, parent); + node = master_to_xml(enc, Z_VAR_ENC_VALUE_P(data), style, parent); if (style == SOAP_ENCODED || (SOAP_GLOBAL(sdl) && encode != enc)) { zval *zstype = Z_VAR_ENC_STYPE_P(data); - ZVAL_DEREF(zstype); if (Z_TYPE_P(zstype) == IS_STRING) { zval *zns = Z_VAR_ENC_NS_P(data); - ZVAL_DEREF(zns); if (Z_TYPE_P(zns) == IS_STRING) { set_ns_and_type_ex(node, Z_STRVAL_P(zns), Z_STRVAL_P(zstype)); } else { @@ -438,13 +431,11 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xml } zval *zname = Z_VAR_ENC_NAME_P(data); - ZVAL_DEREF(zname); if (Z_TYPE_P(zname) == IS_STRING) { xmlNodeSetName(node, BAD_CAST(Z_STRVAL_P(zname))); } zval *znamens = Z_VAR_ENC_NAMENS_P(data); - ZVAL_DEREF(znamens); if (Z_TYPE_P(znamens) == IS_STRING) { xmlNsPtr nsp = encode_add_ns(node, Z_STRVAL_P(znamens)); xmlSetNs(node, nsp); @@ -3499,14 +3490,12 @@ static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type) if (Z_TYPE_P(tmp) == IS_OBJECT && Z_OBJCE_P(tmp) == soap_var_class_entry) { zval *ztype = Z_VAR_ENC_TYPE_P(tmp); - ZVAL_DEREF(ztype); if (Z_TYPE_P(ztype) != IS_LONG) { soap_error0(E_ERROR, "Encoding: SoapVar has no 'enc_type' property"); } cur_type = Z_LVAL_P(ztype); zval *zstype = Z_VAR_ENC_STYPE_P(tmp); - ZVAL_DEREF(zstype); if (Z_TYPE_P(zstype) == IS_STRING) { cur_stype = Z_STRVAL_P(zstype); } else { @@ -3514,7 +3503,6 @@ static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type) } zval *zns = Z_VAR_ENC_NS_P(tmp); - ZVAL_DEREF(zns); if (Z_TYPE_P(zns) == IS_STRING) { cur_ns = Z_STRVAL_P(zns); } else { diff --git a/ext/soap/php_encoding.h b/ext/soap/php_encoding.h index 61de51a63df..a4e16666e68 100644 --- a/ext/soap/php_encoding.h +++ b/ext/soap/php_encoding.h @@ -170,12 +170,12 @@ #define UNKNOWN_TYPE 999998 #define END_KNOWN_TYPES 999999 -#define Z_VAR_ENC_TYPE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0) -#define Z_VAR_ENC_VALUE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1) -#define Z_VAR_ENC_STYPE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 2) -#define Z_VAR_ENC_NS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 3) -#define Z_VAR_ENC_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 4) -#define Z_VAR_ENC_NAMENS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 5) +#define Z_VAR_ENC_TYPE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0)) +#define Z_VAR_ENC_VALUE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1)) +#define Z_VAR_ENC_STYPE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 2)) +#define Z_VAR_ENC_NS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 3)) +#define Z_VAR_ENC_NAME_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 4)) +#define Z_VAR_ENC_NAMENS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 5)) struct _encodeType { int type; diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index 1f3627ea376..c1dd29e828e 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -33,14 +33,12 @@ static zend_string *get_http_headers(php_stream *socketd); int proxy_authentication(zval* this_ptr, smart_str* soap_headers) { zval *login = Z_CLIENT_PROXY_LOGIN_P(this_ptr); - ZVAL_DEREF(login); if (Z_TYPE_P(login) == IS_STRING) { smart_str auth = {0}; smart_str_append(&auth, Z_STR_P(login)); smart_str_appendc(&auth, ':'); zval *password = Z_CLIENT_PROXY_PASSWORD_P(this_ptr); - ZVAL_DEREF(password); if (Z_TYPE_P(password) == IS_STRING) { smart_str_append(&auth, Z_STR_P(password)); } @@ -61,16 +59,12 @@ int basic_authentication(zval* this_ptr, smart_str* soap_headers) { zval *login = Z_CLIENT_LOGIN_P(this_ptr); zval *use_digest = Z_CLIENT_USE_DIGEST_P(this_ptr); - ZVAL_DEREF(login); - ZVAL_DEREF(use_digest); - if (Z_TYPE_P(login) == IS_STRING && Z_TYPE_P(use_digest) != IS_TRUE) { smart_str auth = {0}; smart_str_append(&auth, Z_STR_P(login)); smart_str_appendc(&auth, ':'); zval *password = Z_CLIENT_PASSWORD_P(this_ptr); - ZVAL_DEREF(password); if (Z_TYPE_P(password) == IS_STRING) { smart_str_append(&auth, Z_STR_P(password)); } @@ -171,8 +165,6 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph zval *proxy_host = Z_CLIENT_PROXY_HOST_P(this_ptr); zval *proxy_port = Z_CLIENT_PROXY_PORT_P(this_ptr); - ZVAL_DEREF(proxy_host); - ZVAL_DEREF(proxy_port); if (Z_TYPE_P(proxy_host) == IS_STRING && Z_TYPE_P(proxy_port) == IS_LONG) { host = Z_STRVAL_P(proxy_host); port = Z_LVAL_P(proxy_port); @@ -183,7 +175,6 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph } tmp = Z_CLIENT_CONNECTION_TIMEOUT_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG && Z_LVAL_P(tmp) > 0) { tv.tv_sec = Z_LVAL_P(tmp); tv.tv_usec = 0; @@ -196,7 +187,6 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph /* Changed ternary operator to an if/else so that additional comparisons can be done on the ssl_method property */ if (use_ssl && !*use_proxy) { tmp = Z_CLIENT_SSL_METHOD_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG) { /* uses constants declared in soap.c to determine ssl uri protocol */ switch (Z_LVAL_P(tmp)) { @@ -285,7 +275,6 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph proper encrypyion method based on constants defined in soap.c */ int crypto_method = STREAM_CRYPTO_METHOD_SSLv23_CLIENT; tmp = Z_CLIENT_SSL_METHOD_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG) { switch (Z_LVAL_P(tmp)) { case SOAP_SSL_METHOD_TLS: @@ -349,7 +338,7 @@ int make_http_soap_request(zval *this_ptr, size_t err; php_url *phpurl = NULL; php_stream *stream; - zval *trace, *tmp; + zval *tmp; int use_proxy = 0; int use_ssl; zend_string *http_body; @@ -377,7 +366,6 @@ int make_http_soap_request(zval *this_ptr, request = buf; /* Compress request */ tmp = Z_CLIENT_COMPRESSION_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG) { int level = Z_LVAL_P(tmp) & 0x0f; int kind = Z_LVAL_P(tmp) & SOAP_COMPRESSION_DEFLATE; @@ -426,7 +414,6 @@ int make_http_soap_request(zval *this_ptr, if (Z_TYPE_P(tmp) == IS_RESOURCE) { php_stream_from_zval_no_verify(stream,tmp); tmp = Z_CLIENT_USE_PROXY_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG) { use_proxy = Z_LVAL_P(tmp); } @@ -591,9 +578,7 @@ try_again: smart_str_appendc(&soap_headers, ':'); smart_str_append_unsigned(&soap_headers, phpurl->port); } - tmp = Z_CLIENT_KEEP_ALIVE_P(this_ptr); - ZVAL_DEREF(tmp); - if (!http_1_1 || Z_TYPE_P(tmp) == IS_FALSE) { + if (!http_1_1 || Z_TYPE_P(Z_CLIENT_KEEP_ALIVE_P(this_ptr)) == IS_FALSE) { smart_str_append_const(&soap_headers, "\r\n" "Connection: close\r\n"); } else { @@ -601,7 +586,6 @@ try_again: "Connection: Keep-Alive\r\n"); } tmp = Z_CLIENT_USER_AGENT_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { if (Z_STRLEN_P(tmp) > 0) { smart_str_append_const(&soap_headers, "User-Agent: "); @@ -667,10 +651,8 @@ try_again: /* HTTP Authentication */ login = Z_CLIENT_LOGIN_P(this_ptr); - ZVAL_DEREF(login); if (Z_TYPE_P(login) == IS_STRING) { zval *digest = Z_CLIENT_DIGEST_P(this_ptr); - ZVAL_DEREF(digest); has_authorization = 1; if (Z_TYPE_P(digest) == IS_ARRAY) { @@ -706,7 +688,6 @@ try_again: } PHP_MD5Update(&md5ctx, (unsigned char*)":", 1); password = Z_CLIENT_PASSWORD_P(this_ptr); - ZVAL_DEREF(password); if (Z_TYPE_P(password) == IS_STRING) { PHP_MD5Update(&md5ctx, (unsigned char*)Z_STRVAL_P(password), Z_STRLEN_P(password)); } @@ -821,7 +802,6 @@ try_again: smart_str_append(&auth, Z_STR_P(login)); smart_str_appendc(&auth, ':'); password = Z_CLIENT_PASSWORD_P(this_ptr); - ZVAL_DEREF(password); if (Z_TYPE_P(password) == IS_STRING) { smart_str_append(&auth, Z_STR_P(password)); } @@ -842,7 +822,6 @@ try_again: /* Send cookies along with request */ cookies = Z_CLIENT_COOKIES_P(this_ptr); - ZVAL_DEREF(cookies); if (Z_TYPE_P(cookies) == IS_ARRAY) { zval *data; zend_string *key; @@ -880,9 +859,7 @@ try_again: smart_str_append_const(&soap_headers, "\r\n"); smart_str_0(&soap_headers); - trace = Z_CLIENT_TRACE_P(this_ptr); - ZVAL_DEREF(trace); - if (Z_TYPE_P(trace) == IS_TRUE) { + if (Z_TYPE_P(Z_CLIENT_TRACE_P(this_ptr)) == IS_TRUE) { zval_ptr_dtor(Z_CLIENT_LAST_REQUEST_HEADERS_P(this_ptr)); ZVAL_STR_COPY(Z_CLIENT_LAST_REQUEST_HEADERS_P(this_ptr), soap_headers.s); } @@ -931,9 +908,7 @@ try_again: return FALSE; } - trace = Z_CLIENT_TRACE_P(this_ptr); - ZVAL_DEREF(trace); - if (Z_TYPE_P(trace) == IS_TRUE) { + if (Z_TYPE_P(Z_CLIENT_TRACE_P(this_ptr)) == IS_TRUE) { zval_ptr_dtor(Z_CLIENT_LAST_RESPONSE_HEADERS_P(this_ptr)); ZVAL_STR_COPY(Z_CLIENT_LAST_RESPONSE_HEADERS_P(this_ptr), http_headers); } @@ -983,7 +958,6 @@ try_again: char *cookie; char *eqpos, *sempos; zval *cookies = Z_CLIENT_COOKIES_P(this_ptr); - ZVAL_DEREF(cookies); if (Z_TYPE_P(cookies) != IS_ARRAY) { array_init(cookies); } @@ -1176,9 +1150,6 @@ try_again: zval *login = Z_CLIENT_LOGIN_P(this_ptr); zval *password = Z_CLIENT_PASSWORD_P(this_ptr); char *auth = get_http_header_value(ZSTR_VAL(http_headers), "WWW-Authenticate: "); - ZVAL_DEREF(digest); - ZVAL_DEREF(login); - ZVAL_DEREF(password); if (auth && strstr(auth, "Digest") == auth && Z_TYPE_P(digest) != IS_ARRAY && Z_TYPE_P(login) == IS_STRING && Z_TYPE_P(password) == IS_STRING) { char *s; diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index 39e4c117279..b6ee776b89c 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -3244,7 +3244,6 @@ sdlPtr get_sdl(zval *this_ptr, char *uri, zend_long cache_wsdl) } tmp = Z_CLIENT_USER_AGENT_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING && Z_STRLEN_P(tmp) > 0) { smart_str_appends(&headers, "User-Agent: "); smart_str_appends(&headers, Z_STRVAL_P(tmp)); @@ -3253,8 +3252,6 @@ sdlPtr get_sdl(zval *this_ptr, char *uri, zend_long cache_wsdl) zval *proxy_host = Z_CLIENT_PROXY_HOST_P(this_ptr); zval *proxy_port = Z_CLIENT_PROXY_PORT_P(this_ptr); - ZVAL_DEREF(proxy_host); - ZVAL_DEREF(proxy_port); if (Z_TYPE_P(proxy_host) == IS_STRING && Z_TYPE_P(proxy_port) == IS_LONG) { zval str_proxy; smart_str proxy = {0}; diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h index 3103ab9ca50..33a071ed418 100644 --- a/ext/soap/php_soap.h +++ b/ext/soap/php_soap.h @@ -209,41 +209,48 @@ void add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault #define soap_error3(severity, format, param1, param2, param3) \ php_error(severity, "SOAP-ERROR: " format, param1, param2, param3) -#define Z_CLIENT_URI_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0) -#define Z_CLIENT_STYLE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1) -#define Z_CLIENT_USE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 2) -#define Z_CLIENT_LOCATION_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 3) -#define Z_CLIENT_TRACE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 4) -#define Z_CLIENT_COMPRESSION_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 5) -#define Z_CLIENT_SDL_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 6) -#define Z_CLIENT_TYPEMAP_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 7) -#define Z_CLIENT_HTTPSOCKET_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 8) -#define Z_CLIENT_HTTPURL_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 9) -#define Z_CLIENT_LOGIN_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 10) -#define Z_CLIENT_PASSWORD_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 11) -#define Z_CLIENT_USE_DIGEST_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 12) -#define Z_CLIENT_DIGEST_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 13) -#define Z_CLIENT_PROXY_HOST_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 14) -#define Z_CLIENT_PROXY_PORT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 15) -#define Z_CLIENT_PROXY_LOGIN_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 16) -#define Z_CLIENT_PROXY_PASSWORD_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 17) -#define Z_CLIENT_EXCEPTIONS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 18) -#define Z_CLIENT_ENCODING_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 19) -#define Z_CLIENT_CLASSMAP_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 20) -#define Z_CLIENT_FEATURES_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 21) -#define Z_CLIENT_CONNECTION_TIMEOUT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 22) -#define Z_CLIENT_STREAM_CONTEXT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 23) -#define Z_CLIENT_USER_AGENT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 24) -#define Z_CLIENT_KEEP_ALIVE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 25) -#define Z_CLIENT_SSL_METHOD_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 26) -#define Z_CLIENT_SOAP_VERSION_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 27) -#define Z_CLIENT_USE_PROXY_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 28) -#define Z_CLIENT_COOKIES_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 29) -#define Z_CLIENT_DEFAULT_HEADERS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 30) -#define Z_CLIENT_SOAP_FAULT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 31) -#define Z_CLIENT_LAST_REQUEST_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 32) -#define Z_CLIENT_LAST_RESPONSE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 33) -#define Z_CLIENT_LAST_REQUEST_HEADERS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 34) -#define Z_CLIENT_LAST_RESPONSE_HEADERS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 35) +static zend_always_inline zval *php_soap_deref(zval *zv) { + if (UNEXPECTED(Z_TYPE_P(zv) == IS_REFERENCE)) { + return Z_REFVAL_P(zv); + } + return zv; +} + +#define Z_CLIENT_URI_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0)) +#define Z_CLIENT_STYLE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1)) +#define Z_CLIENT_USE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 2)) +#define Z_CLIENT_LOCATION_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 3)) +#define Z_CLIENT_TRACE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 4)) +#define Z_CLIENT_COMPRESSION_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 5)) +#define Z_CLIENT_SDL_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 6)) +#define Z_CLIENT_TYPEMAP_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 7)) +#define Z_CLIENT_HTTPSOCKET_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 8)) +#define Z_CLIENT_HTTPURL_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 9)) +#define Z_CLIENT_LOGIN_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 10)) +#define Z_CLIENT_PASSWORD_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 11)) +#define Z_CLIENT_USE_DIGEST_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 12)) +#define Z_CLIENT_DIGEST_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 13)) +#define Z_CLIENT_PROXY_HOST_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 14)) +#define Z_CLIENT_PROXY_PORT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 15)) +#define Z_CLIENT_PROXY_LOGIN_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 16)) +#define Z_CLIENT_PROXY_PASSWORD_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 17)) +#define Z_CLIENT_EXCEPTIONS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 18)) +#define Z_CLIENT_ENCODING_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 19)) +#define Z_CLIENT_CLASSMAP_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 20)) +#define Z_CLIENT_FEATURES_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 21)) +#define Z_CLIENT_CONNECTION_TIMEOUT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 22)) +#define Z_CLIENT_STREAM_CONTEXT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 23)) +#define Z_CLIENT_USER_AGENT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 24)) +#define Z_CLIENT_KEEP_ALIVE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 25)) +#define Z_CLIENT_SSL_METHOD_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 26)) +#define Z_CLIENT_SOAP_VERSION_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 27)) +#define Z_CLIENT_USE_PROXY_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 28)) +#define Z_CLIENT_COOKIES_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 29)) +#define Z_CLIENT_DEFAULT_HEADERS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 30)) +#define Z_CLIENT_SOAP_FAULT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 31)) +#define Z_CLIENT_LAST_REQUEST_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 32)) +#define Z_CLIENT_LAST_RESPONSE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 33)) +#define Z_CLIENT_LAST_REQUEST_HEADERS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 34)) +#define Z_CLIENT_LAST_RESPONSE_HEADERS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 35)) #endif diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 1cd4b706c31..0d1acfecec5 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -141,27 +141,27 @@ static void soap_error_handler(int error_num, zend_string *error_filename, const #define FETCH_TYPEMAP_RES(ss,tmp) ss = (HashTable*) zend_fetch_resource_ex(tmp, "typemap", le_typemap) -#define Z_PARAM_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0) -#define Z_PARAM_DATA_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1) +#define Z_PARAM_NAME_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0)) +#define Z_PARAM_DATA_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1)) -#define Z_HEADER_NAMESPACE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0) -#define Z_HEADER_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1) -#define Z_HEADER_DATA_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 2) -#define Z_HEADER_MUST_UNDERSTAND_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 3) -#define Z_HEADER_ACTOR_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 4) +#define Z_HEADER_NAMESPACE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0)) +#define Z_HEADER_NAME_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1)) +#define Z_HEADER_DATA_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 2)) +#define Z_HEADER_MUST_UNDERSTAND_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 3)) +#define Z_HEADER_ACTOR_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 4)) -#define Z_SERVER_SERVICE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0) -#define Z_SERVER_SOAP_FAULT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1) +#define Z_SERVER_SERVICE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0)) +#define Z_SERVER_SOAP_FAULT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1)) /* SoapFault extends Exception, so take those properties into account. */ #define FAULT_PROP_START_OFFSET zend_ce_exception->default_properties_count -#define Z_FAULT_STRING_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 0) -#define Z_FAULT_CODE_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 1) -#define Z_FAULT_CODENS_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 2) -#define Z_FAULT_ACTOR_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 3) -#define Z_FAULT_DETAIL_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 4) -#define Z_FAULT_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 5) -#define Z_FAULT_HEADERFAULT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 6) +#define Z_FAULT_STRING_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 0)) +#define Z_FAULT_CODE_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 1)) +#define Z_FAULT_CODENS_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 2)) +#define Z_FAULT_ACTOR_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 3)) +#define Z_FAULT_DETAIL_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 4)) +#define Z_FAULT_NAME_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 5)) +#define Z_FAULT_HEADERFAULT_P(zv) php_soap_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), FAULT_PROP_START_OFFSET + 6)) #define FETCH_THIS_SERVICE(ss) \ { \ @@ -1785,9 +1785,8 @@ static zend_never_inline ZEND_COLD void soap_real_error_handler(int error_num, z if (Z_OBJ(SOAP_GLOBAL(error_object)) && instanceof_function(Z_OBJCE(SOAP_GLOBAL(error_object)), soap_class_entry)) { - zval *tmp = Z_CLIENT_EXCEPTIONS_P(&SOAP_GLOBAL(error_object)); - ZVAL_DEREF(tmp); - bool use_exceptions = Z_TYPE_P(tmp) != IS_FALSE; + bool use_exceptions = + Z_TYPE_P(Z_CLIENT_EXCEPTIONS_P(&SOAP_GLOBAL(error_object))) != IS_FALSE; if ((error_num & E_FATAL_ERRORS) && use_exceptions) { zval fault; char *code = SOAP_GLOBAL(error_code); @@ -2149,7 +2148,6 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act zend_try { zval *trace = Z_CLIENT_TRACE_P(this_ptr); - ZVAL_DEREF(trace); if (Z_TYPE_P(trace) == IS_TRUE) { zval_ptr_dtor(Z_CLIENT_LAST_REQUEST_P(this_ptr)); ZVAL_STRINGL(Z_CLIENT_LAST_REQUEST_P(this_ptr), buf, buf_size); @@ -2212,8 +2210,6 @@ static void do_soap_call(zend_execute_data *execute_data, zval* output_headers ) /* {{{ */ { - zval *tmp; - zval *trace; sdlPtr sdl = NULL; sdlPtr old_sdl = NULL; sdlFunctionPtr fn; @@ -2230,14 +2226,12 @@ static void do_soap_call(zend_execute_data *execute_data, SOAP_CLIENT_BEGIN_CODE(); - trace = Z_CLIENT_TRACE_P(this_ptr); - ZVAL_DEREF(trace); - if (Z_TYPE_P(trace) == IS_TRUE) { + if (Z_TYPE_P(Z_CLIENT_TRACE_P(this_ptr)) == IS_TRUE) { convert_to_null(Z_CLIENT_LAST_REQUEST_P(this_ptr)); convert_to_null(Z_CLIENT_LAST_RESPONSE_P(this_ptr)); } - tmp = Z_CLIENT_SOAP_VERSION_P(this_ptr); - ZVAL_DEREF(tmp); + + zval *tmp = Z_CLIENT_SOAP_VERSION_P(this_ptr); if (Z_TYPE_P(tmp) == IS_LONG && Z_LVAL_P(tmp) == SOAP_1_2) { soap_version = SOAP_1_2; } else { @@ -2246,7 +2240,6 @@ static void do_soap_call(zend_execute_data *execute_data, if (location == NULL) { tmp = Z_CLIENT_LOCATION_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { location = Z_STRVAL_P(tmp); } @@ -2269,7 +2262,6 @@ static void do_soap_call(zend_execute_data *execute_data, SOAP_GLOBAL(sdl) = sdl; old_encoding = SOAP_GLOBAL(encoding); tmp = Z_CLIENT_ENCODING_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { SOAP_GLOBAL(encoding) = xmlFindCharEncodingHandler(Z_STRVAL_P(tmp)); } else { @@ -2277,7 +2269,6 @@ static void do_soap_call(zend_execute_data *execute_data, } old_class_map = SOAP_GLOBAL(class_map); tmp = Z_CLIENT_CLASSMAP_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_ARRAY) { SOAP_GLOBAL(class_map) = Z_ARRVAL_P(tmp); } else { @@ -2287,7 +2278,6 @@ static void do_soap_call(zend_execute_data *execute_data, SOAP_GLOBAL(typemap) = typemap; old_features = SOAP_GLOBAL(features); tmp = Z_CLIENT_FEATURES_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_LONG) { SOAP_GLOBAL(features) = Z_LVAL_P(tmp); } else { @@ -2342,7 +2332,6 @@ static void do_soap_call(zend_execute_data *execute_data, } } else { zval *uri = Z_CLIENT_URI_P(this_ptr); - ZVAL_DEREF(uri); if (Z_TYPE_P(uri) != IS_STRING) { add_soap_fault(this_ptr, "Client", "Error finding \"uri\" property", NULL, NULL); } else if (location == NULL) { @@ -2503,7 +2492,6 @@ void soap_client_call_impl(INTERNAL_FUNCTION_PARAMETERS, bool is_soap_call) /* Add default headers */ this_ptr = ZEND_THIS; tmp = Z_CLIENT_DEFAULT_HEADERS_P(this_ptr); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_ARRAY) { HashTable *default_headers = Z_ARRVAL_P(tmp); if (soap_headers) { @@ -2625,7 +2613,7 @@ PHP_METHOD(SoapClient, __getLastRequest) RETURN_THROWS(); } - RETURN_COPY_DEREF(Z_CLIENT_LAST_REQUEST_P(ZEND_THIS)); + RETURN_COPY(Z_CLIENT_LAST_REQUEST_P(ZEND_THIS)); } /* }}} */ @@ -2637,7 +2625,7 @@ PHP_METHOD(SoapClient, __getLastResponse) RETURN_THROWS(); } - RETURN_COPY_DEREF(Z_CLIENT_LAST_RESPONSE_P(ZEND_THIS)); + RETURN_COPY(Z_CLIENT_LAST_RESPONSE_P(ZEND_THIS)); } /* }}} */ @@ -2649,7 +2637,7 @@ PHP_METHOD(SoapClient, __getLastRequestHeaders) RETURN_THROWS(); } - RETURN_COPY_DEREF(Z_CLIENT_LAST_REQUEST_HEADERS_P(ZEND_THIS)); + RETURN_COPY(Z_CLIENT_LAST_REQUEST_HEADERS_P(ZEND_THIS)); } /* }}} */ @@ -2661,7 +2649,7 @@ PHP_METHOD(SoapClient, __getLastResponseHeaders) RETURN_THROWS(); } - RETURN_COPY_DEREF(Z_CLIENT_LAST_RESPONSE_HEADERS_P(ZEND_THIS)); + RETURN_COPY(Z_CLIENT_LAST_RESPONSE_HEADERS_P(ZEND_THIS)); } /* }}} */ @@ -2711,8 +2699,6 @@ PHP_METHOD(SoapClient, __setCookie) } zval *cookies = Z_CLIENT_COOKIES_P(this_ptr); - ZVAL_DEREF(cookies); - if (val == NULL) { if (Z_TYPE_P(cookies) == IS_ARRAY) { zend_hash_del(Z_ARRVAL_P(cookies), name); @@ -2738,7 +2724,6 @@ PHP_METHOD(SoapClient, __getCookies) } zval *cookies = Z_CLIENT_COOKIES_P(ZEND_THIS); - ZVAL_DEREF(cookies); if (Z_TYPE_P(cookies) == IS_ARRAY) { RETURN_ARR(zend_array_dup(Z_ARRVAL_P(cookies))); } else { @@ -3279,11 +3264,7 @@ ignore_header: static void set_soap_header_attributes(xmlNodePtr h, zval *header, int version) /* {{{ */ { - zval *tmp; - - tmp = Z_HEADER_MUST_UNDERSTAND_P(header); - ZVAL_DEREF(tmp); - if (Z_TYPE_P(tmp) == IS_TRUE) { + if (Z_TYPE_P(Z_HEADER_MUST_UNDERSTAND_P(header)) == IS_TRUE) { if (version == SOAP_1_1) { xmlSetProp(h, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":mustUnderstand"), BAD_CAST("1")); } else { @@ -3291,8 +3272,7 @@ static void set_soap_header_attributes(xmlNodePtr h, zval *header, int version) } } - tmp = Z_HEADER_ACTOR_P(header); - ZVAL_DEREF(tmp); + zval *tmp = Z_HEADER_ACTOR_P(header); if (Z_TYPE_P(tmp) == IS_STRING) { if (version == SOAP_1_1) { xmlSetProp(h, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":actor"), BAD_CAST(Z_STRVAL_P(tmp))); @@ -3450,13 +3430,10 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function if (Z_TYPE_P(ret) == IS_OBJECT && instanceof_function(Z_OBJCE_P(ret), soap_fault_class_entry)) { - char *detail_name; - zval *tmp; + char *detail_name; sdlFaultPtr fault = NULL; char *fault_ns = NULL; - - tmp = Z_FAULT_HEADERFAULT_P(ret); - ZVAL_DEREF(tmp); + zval *tmp = Z_FAULT_HEADERFAULT_P(ret); if (headers && Z_TYPE_P(tmp) > IS_NULL) { encodePtr hdr_enc = NULL; int hdr_use = SOAP_LITERAL; @@ -3471,7 +3448,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function smart_str key = {0}; tmp = Z_HEADER_NAMESPACE_P(hdr_ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { smart_str_appendl(&key, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); smart_str_appendc(&key, ':'); @@ -3479,7 +3455,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function } tmp = Z_HEADER_NAME_P(hdr_ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { smart_str_appendl(&key, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); hdr_name = Z_STRVAL_P(tmp); @@ -3519,14 +3494,12 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function param = xmlNewChild(body, ns, BAD_CAST("Fault"), NULL); tmp = Z_FAULT_CODENS_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { fault_ns = Z_STRVAL_P(tmp); } use = SOAP_LITERAL; tmp = Z_FAULT_NAME_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { sdlFaultPtr tmp_fault; if (function && function->faults && @@ -3573,7 +3546,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function if (version == SOAP_1_1) { tmp = Z_FAULT_CODE_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { xmlNodePtr node = xmlNewNode(NULL, BAD_CAST("faultcode")); zend_string *str = php_escape_html_entities((unsigned char*)Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0, 0, NULL); @@ -3589,13 +3561,11 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function zend_string_release_ex(str, 0); } tmp = Z_FAULT_STRING_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { xmlNodePtr node = master_to_xml(get_conversion(IS_STRING), tmp, SOAP_LITERAL, param); xmlNodeSetName(node, BAD_CAST("faultstring")); } tmp = Z_FAULT_ACTOR_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { xmlNodePtr node = master_to_xml(get_conversion(IS_STRING), tmp, SOAP_LITERAL, param); xmlNodeSetName(node, BAD_CAST("faultactor")); @@ -3603,7 +3573,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function detail_name = "detail"; } else { tmp = Z_FAULT_CODE_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { xmlNodePtr node = xmlNewChild(param, ns, BAD_CAST("Code"), NULL); zend_string *str = php_escape_html_entities((unsigned char*)Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0, 0, NULL); @@ -3619,7 +3588,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function zend_string_release_ex(str, 0); } tmp = Z_FAULT_STRING_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { xmlNodePtr node = xmlNewChild(param, ns, BAD_CAST("Reason"), NULL); node = master_to_xml(get_conversion(IS_STRING), tmp, SOAP_LITERAL, node); @@ -3635,7 +3603,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function xmlNodePtr x; tmp = Z_FAULT_DETAIL_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) > IS_NULL) { detail = tmp; } @@ -3681,7 +3648,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function } } else { tmp = Z_FAULT_DETAIL_P(ret); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) > IS_NULL) { serialize_zval(tmp, NULL, detail_name, use, param); } @@ -3710,14 +3676,12 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function smart_str key = {0}; tmp = Z_HEADER_NAMESPACE_P(&h->retval); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { smart_str_appendl(&key, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); smart_str_appendc(&key, ':'); hdr_ns = Z_STRVAL_P(tmp); } tmp = Z_HEADER_NAME_P(&h->retval); - ZVAL_DEREF(tmp); if (Z_TYPE_P(tmp) == IS_STRING) { smart_str_appendl(&key, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); hdr_name = Z_STRVAL_P(tmp); @@ -3861,7 +3825,6 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function } } else { zstyle = Z_CLIENT_STYLE_P(this_ptr); - ZVAL_DEREF(zstyle); if (Z_TYPE_P(zstyle) == IS_LONG) { style = Z_LVAL_P(zstyle); } else { @@ -3885,7 +3848,6 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function } zuse = Z_CLIENT_USE_P(this_ptr); - ZVAL_DEREF(zuse); if (Z_TYPE_P(zuse) == IS_LONG && Z_LVAL_P(zuse) == SOAP_LITERAL) { use = SOAP_LITERAL; } else { @@ -3946,8 +3908,6 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function zval *name = Z_HEADER_NAME_P(header); zval *ns = Z_HEADER_NAMESPACE_P(header); - ZVAL_DEREF(name); - ZVAL_DEREF(ns); if (Z_TYPE_P(name) == IS_STRING && Z_TYPE_P(ns) == IS_STRING) { xmlNodePtr h; xmlNsPtr nsptr; @@ -4022,7 +3982,6 @@ static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int in && Z_OBJCE_P(param_val) == soap_param_class_entry) { zval *param_name = Z_PARAM_NAME_P(param_val); zval *param_data = Z_PARAM_DATA_P(param_val); - ZVAL_DEREF(param_name); if (Z_TYPE_P(param_name) == IS_STRING && Z_TYPE_P(param_data) != IS_UNDEF) { param_val = param_data; name = Z_STRVAL_P(param_name);