fix for ext/soap

From: Date: Fri, 22 Nov 2002 13:03:06 +0000
Subject: fix for ext/soap
Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-11002@lists.php.net to get a copy of this message
As I don't have enough Karma to commit it by myself I'll post the patch here: it fixes some un-initialized variables and checks for a buffer under-run which can occure if a invalid response is sent back. Jan -- http://jan.kneschke.de - localizer, modlogan, pxtools mailto:jan@kneschke.de - Jan Kneschke

? pecl.soap.diff ? php_encoding.lo ? php_http.lo ? php_packet_soap.lo ? php_schema.lo ? php_sdl.lo ? php_xml.lo ? soap.lo Index: php_http.c =================================================================== RCS file: /repository/pear/PECL/soap/php_http.c,v retrieving revision 1.5 diff -u -r1.5 php_http.c --- php_http.c 15 Sep 2002 20:45:46 -0000 1.5 +++ php_http.c 22 Nov 2002 12:49:18 -0000 @@ -214,8 +214,7 @@ efree(http_version); } - - + if(!get_http_body(stream, http_headers, &http_body, &http_body_size)) php_error(E_ERROR, "Error Fetching http body"); @@ -368,15 +367,16 @@ done = FALSE; http_buf = emalloc(1); + *http_buf = '\0'; while(!done) { - cur = 0; - while(!(chunk_size[cur - 2] == '\r' && chunk_size[cur - 1] == '\n')) + for (cur = 0; cur < 3 || !(chunk_size[cur - 2] == '\r' && chunk_size[cur - 1] == '\n'); cur++) #ifdef PHP_STREAMS - chunk_size[cur++] = php_stream_getc(stream); + chunk_size[cur] = php_stream_getc(stream); #else - chunk_size[cur++] = php_sock_fgetc(stream); + chunk_size[cur] = php_sock_fgetc(stream); #endif + chunk_size[cur] = '\0'; if(sscanf(chunk_size,"%x",&buf_size) != -1) { http_buf = erealloc(http_buf,http_buf_size + buf_size); Index: php_packet_soap.c =================================================================== RCS file: /repository/pear/PECL/soap/php_packet_soap.c,v retrieving revision 1.5 diff -u -r1.5 php_packet_soap.c --- php_packet_soap.c 15 Sep 2002 20:45:46 -0000 1.5 +++ php_packet_soap.c 22 Nov 2002 12:49:18 -0000 @@ -9,6 +9,10 @@ response = xmlParseMemory(buffer, buffer_size); xmlCleanupParser(); + + if (!response) { + php_error(E_ERROR, "looks like we got no XML document"); + } (*num_params) = 0; @@ -55,7 +59,7 @@ sdlParamPtr *h_param, param = NULL; xmlNodePtr val = NULL; encodePtr enc; - char *name, *ns; + char *name, *ns = NULL; if(fn->bindingType == BINDING_SOAP) { Index: soap.c =================================================================== RCS file: /repository/pear/PECL/soap/soap.c,v retrieving revision 1.7 diff -u -r1.7 soap.c --- soap.c 15 Sep 2002 20:45:46 -0000 1.7 +++ soap.c 22 Nov 2002 12:49:19 -0000 @@ -2265,4 +2265,4 @@ } } return FAILURE; -} \ No newline at end of file +}
« previous php.pear.dev (#11002) next »