Commit 98e920c22ae for php.net
commit 98e920c22ae0f73a7f88b6d2c3c5fd25c7a84fbf
Author: Gina Peter Banyard <girgias@php.net>
Date: Thu Jul 2 22:46:55 2026 +0100
ext/soap: minor refactorings of parse_packet_soap()
- Add const qualifiers
- Reduce scope of variable
- Reuse computed strlen()
- Use uint32_t type instead of int type
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
index 2a2f94cb349..68ed9a7a768 100644
--- a/ext/soap/php_packet_soap.c
+++ b/ext/soap/php_packet_soap.c
@@ -41,11 +41,11 @@ static void master_to_zval_with_doc_cleanup(zval *ret, encodePtr encode, xmlNode
/* SOAP client calls this function to parse response from SOAP server */
bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, zval *return_value, zval *soap_headers)
{
- char* envelope_ns = NULL;
+ const char *envelope_ns = NULL;
xmlDocPtr response;
- xmlNodePtr trav, env, head, body, resp, cur, fault;
+ xmlNodePtr trav, env, head, body, resp, fault;
xmlAttrPtr attr;
- int param_count = 0;
+ uint32_t param_count = 0;
int soap_version = SOAP_1_1;
HashTable *hdrs = NULL;
@@ -107,7 +107,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
add_soap_fault(this_ptr, "Client", "encodingStyle cannot be specified on the Envelope", NULL, NULL, soap_lang_en);
xmlFreeDoc(response);
return false;
- } else if (strcmp((char*)attr->children->content, SOAP_1_1_ENC_NAMESPACE) != 0) {
+ } else if (strcmp((const char*)attr->children->content, SOAP_1_1_ENC_NAMESPACE) != 0) {
add_soap_fault(this_ptr, "Client", "Unknown data encoding style", NULL, NULL, soap_lang_en);
xmlFreeDoc(response);
return false;
@@ -196,7 +196,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
/* Check if <Body> contains <Fault> element */
fault = get_node_ex(body->children,"Fault",envelope_ns);
if (fault != NULL) {
- char *faultcode = NULL;
+ const char *faultcode = NULL;
zend_string *lang = ZSTR_EMPTY_ALLOC();
zend_string *faultstring = NULL, *faultactor = NULL;
zval details;
@@ -206,7 +206,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
if (soap_version == SOAP_1_1) {
tmp = get_node(fault->children, "faultcode");
if (tmp != NULL && tmp->children != NULL) {
- faultcode = (char*)tmp->children->content;
+ faultcode = (const char*)tmp->children->content;
}
tmp = get_node(fault->children, "faultstring");
@@ -234,7 +234,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
if (tmp != NULL && tmp->children != NULL) {
tmp = get_node(tmp->children, "Value");
if (tmp != NULL && tmp->children != NULL) {
- faultcode = (char*)tmp->children->content;
+ faultcode = (const char*)tmp->children->content;
}
}
@@ -287,16 +287,15 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
/* Function has WSDL description */
sdlParamPtr param = NULL;
xmlNodePtr val = NULL;
- char *name, *ns = NULL;
zval tmp;
sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)fn->bindingAttributes;
- int res_count;
hdrs = fnb->output.headers;
if (fn->responseParameters) {
- res_count = zend_hash_num_elements(fn->responseParameters);
+ uint32_t res_count = zend_hash_num_elements(fn->responseParameters);
ZEND_HASH_FOREACH_PTR(fn->responseParameters, param) {
+ const char *name, *ns = NULL;
if (fnb->style == SOAP_DOCUMENT) {
if (param->element) {
name = param->element->name;
@@ -314,7 +313,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
}
/* Get value of parameter */
- cur = get_node_ex(resp, name, ns);
+ xmlNodePtr cur = get_node_ex(resp, name, ns);
if (!cur) {
cur = get_node(resp, name);
/* TODO: produce warning invalid ns */
@@ -373,20 +372,22 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
if (val != NULL) {
if (!node_is_equal_ex(val,"result",RPC_SOAP12_NAMESPACE)) {
zval tmp;
- zval *arr;
master_to_zval_with_doc_cleanup(&tmp, NULL, val, response);
if (val->name) {
- if ((arr = zend_hash_str_find(Z_ARRVAL_P(return_value), (char*)val->name, strlen((char*)val->name))) != NULL) {
+ const char *val_name = (const char*) val->name;
+ size_t val_name_len = strlen(val_name);
+ zval *arr = zend_hash_str_find(Z_ARRVAL_P(return_value), val_name, val_name_len);
+ if (arr != NULL) {
add_next_index_zval(arr, &tmp);
- } else if (val->next && get_node(val->next, (char*)val->name)) {
- zval arr;
+ } else if (val->next && get_node(val->next, val_name)) {
+ zval new_arr;
- array_init(&arr);
- add_next_index_zval(&arr, &tmp);
- add_assoc_zval(return_value, (char*)val->name, &arr);
+ array_init(&new_arr);
+ add_next_index_zval(&new_arr, &tmp);
+ add_assoc_zval_ex(return_value, val_name, val_name_len, &new_arr);
} else {
- add_assoc_zval(return_value, (char*)val->name, &tmp);
+ add_assoc_zval_ex(return_value, val_name, val_name_len, &tmp);
}
} else {
add_next_index_zval(return_value, &tmp);
@@ -430,10 +431,10 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
sdlSoapBindingFunctionHeaderPtr hdr;
if (trav->ns) {
- smart_str_appends(&key, (char*)trav->ns->href);
+ smart_str_appends(&key, (const char*)trav->ns->href);
smart_str_appendc(&key,':');
}
- smart_str_appends(&key, (char*)trav->name);
+ smart_str_appends(&key, (const char*)trav->name);
smart_str_0(&key);
if ((hdr = zend_hash_find_ptr(hdrs, key.s)) != NULL) {
enc = hdr->encode;
@@ -441,7 +442,7 @@ bool parse_packet_soap(zval *this_ptr, zend_string *buffer, sdlFunctionPtr fn, z
smart_str_free(&key);
}
master_to_zval_with_doc_cleanup(&val, enc, trav, response);
- add_assoc_zval(soap_headers, (char*)trav->name, &val);
+ add_assoc_zval(soap_headers, (const char*)trav->name, &val);
}
trav = trav->next;
}