diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 13:18:23 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 15:12:39 +0200 |
commit | afee7ed110b970f64e6f5d3139262097c462ceae (patch) | |
tree | 6378d76b164e5b73685f468c5ff04bd6d0e08865 /ext/soap | |
parent | 54bdb25d9f9e30de3c27e9eca80746d34f2aefdf (diff) | |
download | php-git-afee7ed110b970f64e6f5d3139262097c462ceae.tar.gz |
Avoid unitialized variable warning in soap
Extract envelope fetch into separate function, so the control
flow becomes more obvious.
Diffstat (limited to 'ext/soap')
-rw-r--r-- | ext/soap/soap.c | 50 |
1 files changed, 28 insertions, 22 deletions
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 <Envelope> 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 <Envelope> 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); } |