From: Nikita Popov Date: Fri, 12 Apr 2019 11:18:23 +0000 (+0200) Subject: Avoid unitialized variable warning in soap X-Git-Tag: php-7.4.0alpha1~519 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=afee7ed110b970f64e6f5d3139262097c462ceae;p=php Avoid unitialized variable warning in soap Extract envelope fetch into separate function, so the control flow becomes more obvious. --- diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 0209125bbc..3f86b6200b 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -2079,7 +2079,7 @@ static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeade } /* }}} */ -static void soap_server_fault(char* code, char* string, char *actor, zval* details, char* name) /* {{{ */ +static ZEND_NORETURN void soap_server_fault(char* code, char* string, char *actor, zval* details, char* name) /* {{{ */ { zval ret; @@ -3400,37 +3400,43 @@ static sdlFunctionPtr find_function(sdlPtr sdl, xmlNodePtr func, zval* function_ } /* }}} */ -static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval **parameters, int *version, soapHeader **headers) /* {{{ */ -{ - char* envelope_ns = NULL; - xmlNodePtr trav,env,head,body,func; - xmlAttrPtr attr; - sdlFunctionPtr function; - - encode_reset_ns(); - - /* Get element */ - env = NULL; - trav = request->children; +static xmlNodePtr get_envelope(xmlNodePtr trav, int *version, char **envelope_ns) { while (trav != NULL) { if (trav->type == XML_ELEMENT_NODE) { - if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_1_ENV_NAMESPACE)) { - env = trav; + if (node_is_equal_ex(trav,"Envelope",SOAP_1_1_ENV_NAMESPACE)) { *version = SOAP_1_1; - envelope_ns = SOAP_1_1_ENV_NAMESPACE; + *envelope_ns = SOAP_1_1_ENV_NAMESPACE; SOAP_GLOBAL(soap_version) = SOAP_1_1; - } else if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_2_ENV_NAMESPACE)) { - env = trav; + return trav; + } + + if (node_is_equal_ex(trav,"Envelope",SOAP_1_2_ENV_NAMESPACE)) { *version = SOAP_1_2; - envelope_ns = SOAP_1_2_ENV_NAMESPACE; + *envelope_ns = SOAP_1_2_ENV_NAMESPACE; SOAP_GLOBAL(soap_version) = SOAP_1_2; - } else { - soap_server_fault("VersionMismatch", "Wrong Version", NULL, NULL, NULL); + return trav; } + + soap_server_fault("VersionMismatch", "Wrong Version", NULL, NULL, NULL); } trav = trav->next; } - if (env == NULL) { + + return NULL; +} + +static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval **parameters, int *version, soapHeader **headers) /* {{{ */ +{ + char* envelope_ns = NULL; + xmlNodePtr trav,env,head,body,func; + xmlAttrPtr attr; + sdlFunctionPtr function; + + encode_reset_ns(); + + /* Get element */ + env = get_envelope(request->children, version, &envelope_ns); + if (!env) { soap_server_fault("Client", "looks like we got XML without \"Envelope\" element", NULL, NULL, NULL); }