mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Added type checks
This commit is contained in:
parent
d5248f67b5
commit
0c136a2abd
@ -3649,18 +3649,21 @@ static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type TS
|
||||
Z_OBJCE_PP(tmp) == soap_var_class_entry) {
|
||||
zval **ztype;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_type", sizeof("enc_type"), (void **)&ztype) == FAILURE) {
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_type", sizeof("enc_type"), (void **)&ztype) == FAILURE ||
|
||||
Z_TYPE_PP(ztype) != IS_LONG) {
|
||||
soap_error0(E_ERROR, "Encoding: SoapVar has no 'enc_type' property");
|
||||
}
|
||||
cur_type = Z_LVAL_PP(ztype);
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_stype", sizeof("enc_stype"), (void **)&ztype) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_stype", sizeof("enc_stype"), (void **)&ztype) == SUCCESS &&
|
||||
Z_TYPE_PP(ztype) == IS_STRING) {
|
||||
cur_stype = Z_STRVAL_PP(ztype);
|
||||
} else {
|
||||
cur_stype = NULL;
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_ns", sizeof("enc_ns"), (void **)&ztype) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_ns", sizeof("enc_ns"), (void **)&ztype) == SUCCESS &&
|
||||
Z_TYPE_PP(ztype) == IS_STRING) {
|
||||
cur_ns = Z_STRVAL_PP(ztype);
|
||||
} else {
|
||||
cur_ns = NULL;
|
||||
|
@ -36,14 +36,16 @@ int proxy_authentication(zval* this_ptr, smart_str* soap_headers TSRMLS_DC)
|
||||
{
|
||||
zval **login, **password;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_login", sizeof("_proxy_login"), (void **)&login) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_login", sizeof("_proxy_login"), (void **)&login) == SUCCESS &&
|
||||
Z_TYPE_PP(login) == IS_STRING) {
|
||||
unsigned char* buf;
|
||||
int len;
|
||||
smart_str auth = {0};
|
||||
|
||||
smart_str_appendl(&auth, Z_STRVAL_PP(login), Z_STRLEN_PP(login));
|
||||
smart_str_appendc(&auth, ':');
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_password", sizeof("_proxy_password"), (void **)&password) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_password", sizeof("_proxy_password"), (void **)&password) == SUCCESS &&
|
||||
Z_TYPE_PP(password) == IS_STRING) {
|
||||
smart_str_appendl(&auth, Z_STRVAL_PP(password), Z_STRLEN_PP(password));
|
||||
}
|
||||
smart_str_0(&auth);
|
||||
@ -64,14 +66,16 @@ int basic_authentication(zval* this_ptr, smart_str* soap_headers TSRMLS_DC)
|
||||
zval **login, **password;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_login", sizeof("_login"), (void **)&login) == SUCCESS &&
|
||||
!zend_hash_exists(Z_OBJPROP_P(this_ptr), "_digest", sizeof("_digest"))) {
|
||||
Z_TYPE_PP(login) == IS_STRING &&
|
||||
!zend_hash_exists(Z_OBJPROP_P(this_ptr), "_digest", sizeof("_digest"))) {
|
||||
unsigned char* buf;
|
||||
int len;
|
||||
smart_str auth = {0};
|
||||
|
||||
smart_str_appendl(&auth, Z_STRVAL_PP(login), Z_STRLEN_PP(login));
|
||||
smart_str_appendc(&auth, ':');
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_password", sizeof("_password"), (void **)&password) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_password", sizeof("_password"), (void **)&password) == SUCCESS &&
|
||||
Z_TYPE_PP(password) == IS_STRING) {
|
||||
smart_str_appendl(&auth, Z_STRVAL_PP(password), Z_STRLEN_PP(password));
|
||||
}
|
||||
smart_str_0(&auth);
|
||||
@ -509,6 +513,7 @@ try_again:
|
||||
}
|
||||
if (!http_1_1 ||
|
||||
(zend_hash_find(Z_OBJPROP_P(this_ptr), "_keep_alive", sizeof("_keep_alive"), (void **)&tmp) == SUCCESS &&
|
||||
(Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG) &&
|
||||
Z_LVAL_PP(tmp) == 0)) {
|
||||
smart_str_append_const(&soap_headers, "\r\n"
|
||||
"Connection: close\r\n");
|
||||
@ -742,7 +747,8 @@ try_again:
|
||||
}
|
||||
|
||||
/* Send cookies along with request */
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == SUCCESS &&
|
||||
Z_TYPE_PP(cookies) == IS_ARRAY) {
|
||||
zval **data;
|
||||
char *key;
|
||||
int i, n;
|
||||
@ -785,7 +791,7 @@ try_again:
|
||||
smart_str_append_const(&soap_headers, "\r\n");
|
||||
smart_str_0(&soap_headers);
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
|
||||
Z_LVAL_PP(trace) > 0) {
|
||||
(Z_TYPE_PP(trace) == IS_BOOL || Z_TYPE_PP(trace) == IS_LONG) && Z_LVAL_PP(trace) != 0) {
|
||||
add_property_stringl(this_ptr, "__last_request_headers", soap_headers.c, soap_headers.len, 1);
|
||||
}
|
||||
smart_str_appendl(&soap_headers, request, request_size);
|
||||
@ -830,7 +836,7 @@ try_again:
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
|
||||
Z_LVAL_PP(trace) > 0) {
|
||||
(Z_TYPE_PP(trace) == IS_BOOL || Z_TYPE_PP(trace) == IS_LONG) && Z_LVAL_PP(trace) != 0) {
|
||||
add_property_stringl(this_ptr, "__last_response_headers", http_headers, http_header_size, 1);
|
||||
}
|
||||
|
||||
@ -879,7 +885,8 @@ try_again:
|
||||
char *eqpos, *sempos;
|
||||
zval **cookies;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == FAILURE) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == FAILURE ||
|
||||
Z_TYPE_PP(cookies) != IS_ARRAY) {
|
||||
zval *tmp_cookies;
|
||||
MAKE_STD_ZVAL(tmp_cookies);
|
||||
array_init(tmp_cookies);
|
||||
|
@ -2554,7 +2554,7 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
|
||||
Z_LVAL_PP(trace) > 0) {
|
||||
(Z_LVAL_PP(trace) == IS_BOOL || Z_LVAL_PP(trace) == IS_LONG) && Z_LVAL_PP(trace) != 0) {
|
||||
add_property_stringl(this_ptr, "__last_request", buf, buf_size, 1);
|
||||
}
|
||||
|
||||
@ -2594,7 +2594,7 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act
|
||||
}
|
||||
ret = FALSE;
|
||||
} else if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
|
||||
Z_LVAL_PP(trace) > 0) {
|
||||
(Z_LVAL_PP(trace) == IS_BOOL || Z_LVAL_PP(trace) == IS_LONG) && Z_LVAL_PP(trace) != 0) {
|
||||
add_property_stringl(this_ptr, "__last_response", Z_STRVAL_P(response), Z_STRLEN_P(response), 1);
|
||||
}
|
||||
xmlFree(buf);
|
||||
@ -2633,13 +2633,13 @@ static void do_soap_call(zval* this_ptr,
|
||||
|
||||
SOAP_CLIENT_BEGIN_CODE();
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS
|
||||
&& Z_LVAL_PP(trace) > 0) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
|
||||
(Z_LVAL_PP(trace) == IS_BOOL || Z_LVAL_PP(trace) == IS_LONG) && Z_LVAL_PP(trace) != 0) {
|
||||
zend_hash_del(Z_OBJPROP_P(this_ptr), "__last_request", sizeof("__last_request"));
|
||||
zend_hash_del(Z_OBJPROP_P(this_ptr), "__last_response", sizeof("__last_response"));
|
||||
}
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_soap_version", sizeof("_soap_version"), (void **) &tmp) == SUCCESS
|
||||
&& Z_LVAL_PP(tmp) == SOAP_1_2) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_soap_version", sizeof("_soap_version"), (void **) &tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_LONG && Z_LVAL_PP(tmp) == SOAP_1_2) {
|
||||
soap_version = SOAP_1_2;
|
||||
} else {
|
||||
soap_version = SOAP_1_1;
|
||||
@ -2735,7 +2735,7 @@ static void do_soap_call(zval* this_ptr,
|
||||
zval **uri;
|
||||
smart_str action = {0};
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "uri", sizeof("uri"), (void *)&uri) == FAILURE) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "uri", sizeof("uri"), (void *)&uri) == FAILURE || Z_TYPE_PP(uri) != IS_STRING) {
|
||||
add_soap_fault(this_ptr, "Client", "Error finding \"uri\" property", NULL, NULL TSRMLS_CC);
|
||||
} else if (location == NULL) {
|
||||
add_soap_fault(this_ptr, "Client", "Error could not find \"location\" property", NULL, NULL TSRMLS_CC);
|
||||
@ -3006,7 +3006,8 @@ PHP_METHOD(SoapClient, __getLastRequest)
|
||||
return;
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request", sizeof("__last_request"), (void **)&tmp) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request", sizeof("__last_request"), (void **)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
}
|
||||
RETURN_NULL();
|
||||
@ -3024,7 +3025,8 @@ PHP_METHOD(SoapClient, __getLastResponse)
|
||||
return;
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response", sizeof("__last_response"), (void **)&tmp) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response", sizeof("__last_response"), (void **)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
}
|
||||
RETURN_NULL();
|
||||
@ -3042,7 +3044,8 @@ PHP_METHOD(SoapClient, __getLastRequestHeaders)
|
||||
return;
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request_headers", sizeof("__last_request_headers"), (void **)&tmp) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request_headers", sizeof("__last_request_headers"), (void **)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
}
|
||||
RETURN_NULL();
|
||||
@ -3060,7 +3063,8 @@ PHP_METHOD(SoapClient, __getLastResponseHeaders)
|
||||
return;
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response_headers", sizeof("__last_response_headers"), (void **)&tmp) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response_headers", sizeof("__last_response_headers"), (void **)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
}
|
||||
RETURN_NULL();
|
||||
@ -3116,13 +3120,15 @@ PHP_METHOD(SoapClient, __setCookie)
|
||||
}
|
||||
|
||||
if (val == NULL) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == SUCCESS &&
|
||||
Z_TYPE_PP(cookies) == IS_ARRAY) {
|
||||
zend_hash_del(Z_ARRVAL_PP(cookies), name, name_len+1);
|
||||
}
|
||||
} else {
|
||||
zval *zcookie;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == FAILURE) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == FAILURE ||
|
||||
Z_TYPE_PP(cookies) != IS_ARRAY) {
|
||||
zval *tmp_cookies;
|
||||
|
||||
MAKE_STD_ZVAL(tmp_cookies);
|
||||
@ -3150,7 +3156,8 @@ PHP_METHOD(SoapClient, __getCookies)
|
||||
|
||||
array_init(return_value);
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) != FAILURE) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) != FAILURE &&
|
||||
Z_TYPE_PP(cookies) == IS_ARRAY) {
|
||||
zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_P(*cookies), (copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*));
|
||||
}
|
||||
}
|
||||
@ -4237,7 +4244,8 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "style", sizeof("style"), (void **)&zstyle) == SUCCESS) {
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "style", sizeof("style"), (void **)&zstyle) == SUCCESS &&
|
||||
Z_TYPE_PP(zstyle) == IS_LONG) {
|
||||
style = Z_LVAL_PP(zstyle);
|
||||
} else {
|
||||
style = SOAP_RPC;
|
||||
@ -4260,7 +4268,7 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function
|
||||
}
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "use", sizeof("use"), (void **)&zuse) == SUCCESS &&
|
||||
Z_LVAL_PP(zuse) == SOAP_LITERAL) {
|
||||
Z_TYPE_PP(zuse) == IS_LONG && Z_LVAL_PP(zuse) == SOAP_LITERAL) {
|
||||
use = SOAP_LITERAL;
|
||||
} else {
|
||||
use = SOAP_ENCODED;
|
||||
@ -4390,6 +4398,7 @@ static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int in
|
||||
zval **param_data;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(param_val), "param_name", sizeof("param_name"), (void **)¶m_name) == SUCCESS &&
|
||||
Z_TYPE_PP(param_name) == IS_STRING &&
|
||||
zend_hash_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data"), (void **)¶m_data) == SUCCESS) {
|
||||
param_val = *param_data;
|
||||
name = Z_STRVAL_PP(param_name);
|
||||
|
Loading…
Reference in New Issue
Block a user