1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 08:12:21 +01:00

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.
This commit is contained in:
Nikita Popov
2021-08-20 13:10:58 +02:00
parent a893a4901f
commit 50484b59cd
6 changed files with 83 additions and 161 deletions

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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};

View File

@@ -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

View File

@@ -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);