From: Nikita Popov Date: Fri, 12 Apr 2019 11:18:23 +0000 (+0200) Subject: Avoid unitialized variable warning in soap X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a830682a9a767a92de84b4d7c35d072a8f5fc2a6;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 312e121ae0..9984a343ca 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -2077,7 +2077,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; @@ -3398,37 +3398,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); }