From: Dmitry Stogov Date: Tue, 18 Apr 2006 13:07:59 +0000 (+0000) Subject: Fixed bug #37083 (Frequent crashs in SOAP extension with new WSDL caching code in... X-Git-Tag: php-5.1.3RC3~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=349bcd744336b3da8e04b5bef3b0e8ffdaaddc1a;p=php Fixed bug #37083 (Frequent crashs in SOAP extension with new WSDL caching code in multithread WS). (Andrei, Dmitry) --- diff --git a/NEWS b/NEWS index 878deb4710..50ea9dbf14 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Apr 2006, PHP 5.1.3 - Fixed bug #37103 (libmbfl headers not installed). (Jani) +- Fixed bug #37083 (Frequent crashs in SOAP extension with new WSDL caching + code in multithread WS). (Andrei, Dmitry) - Fixed bug #37062 (compile failure on ARM architecture). (Tony) - Fixed bug #37061 (curl_exec() doesn't zero-terminate binary strings). (Tony) - Fixed bug #37060 (Type of retval of Countable::count() is not checked). diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index ba7fa5ad57..3d09b6bbc0 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -143,13 +143,18 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type) enc = get_encoder_ex(NULL, enc_nscat, enc_len); efree(enc_nscat); if (enc && sdl) { - encodePtr new_enc = emalloc(sizeof(encode)); + encodePtr new_enc = pemalloc(sizeof(encode), sdl->is_persistent); memcpy(new_enc, enc, sizeof(encode)); - new_enc->details.ns = estrndup(ns, ns_len); - new_enc->details.type_str = estrdup(new_enc->details.type_str); + if (sdl->is_persistent) { + new_enc->details.ns = zend_strndup(ns, ns_len); + new_enc->details.type_str = strdup(new_enc->details.type_str); + } else { + new_enc->details.ns = estrndup(ns, ns_len); + new_enc->details.type_str = estrdup(new_enc->details.type_str); + } if (sdl->encoders == NULL) { - sdl->encoders = emalloc(sizeof(HashTable)); - zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, 0); + sdl->encoders = pemalloc(sizeof(HashTable), sdl->is_persistent); + zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, sdl->is_persistent); } zend_hash_update(sdl->encoders, nscat, len + 1, &new_enc, sizeof(encodePtr), NULL); enc = new_enc; diff --git a/ext/soap/tests/bugs/bug37083.phpt b/ext/soap/tests/bugs/bug37083.phpt new file mode 100755 index 0000000000..77e9181a92 --- /dev/null +++ b/ext/soap/tests/bugs/bug37083.phpt @@ -0,0 +1,58 @@ +--TEST-- +Bug #37083 (Frequent crashs in SOAP extension with new WSDL caching code in multithread WS) +--SKIPIF-- + +--INI-- +soap.wsdl_cache_enabled=0 +--FILE-- + + + + + + +0343501 +oai:dlmd.ifremer.fr:59001680.13684115xml1 +oai:dlmd.ifremer.fr:59000390.13684115xml2 +oai:dlmd.ifremer.fr:59000400.13684115xml3 +oai:dlmd.ifremer.fr:415340.13684115xml4 +oai:dlmd.ifremer.fr:59000380.13684115xml5 +oai:dlmd.ifremer.fr:29002290.13684115xml6 +oai:dlmd.ifremer.fr:29002280.13684115xml7 +oai:dlmd.ifremer.fr:29002300.13684115xml8 +oai:dlmd.ifremer.fr:29002350.13684115xml9 +oai:dlmd.ifremer.fr:59001960.13684115xml10 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-12-01T04:58:00.000ZminLongitude105.539maxLongitude112.283maxLatitude-30.024minLatitude-34.788 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-06-07T17:41:44.000ZminLongitude129.882maxLongitude133.635maxLatitude39.529minLatitude36.419 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-03-10T01:40:00.000ZminLongitude63.121maxLongitude80.92maxLatitude0.158minLatitude-3.675 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2003-01-12T05:15:00.000ZminLongitude-42.88maxLongitude-20.85maxLatitude61.41minLatitude43.2 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-12-01T16:50:00.000ZminLongitude108.962maxLongitude114.713maxLatitude-35.262minLatitude-42.756 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2003-10-10T11:52:00.000ZminLongitude68.14maxLongitude95.987maxLatitude3.97minLatitude-1.242 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-01-10T10:35:00.000ZminLongitude67.71maxLongitude77.743maxLatitude3.546minLatitude-1.965 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-04-09T23:00:00.000ZminLongitude59.116maxLongitude69.206maxLatitude-2.274minLatitude-4.093 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2002-11-09T23:10:00.000ZminLongitude156.013maxLongitude160.042maxLatitude5.648minLatitude4.773 +maxDateTime2038-12-31T22:59:59.000ZminDateTime2004-11-01T16:58:00.000ZminLongitude108.11maxLongitude113.383maxLatitude-31.666minLatitude-35.075 + +EOF; + } +} +for ($i = 0; $i < 10; $i++) { + $ws=new TestSoapClient(dirname(__FILE__).'/bug37083.wsdl', + array('encoding'=>'ISO-8859-1', + 'cache_wsdl'=>1)); + $search=new stdClass(); + $search->queryString='argo'; + $search->ranges[]=$r=new stdClass(); + $r->field='maxDateTime'; + $r->min='2003-04-01'; + $search->index='all'; + $res=$ws->search($search,0,10); +} +echo "ok\n"; +?> +--EXPECT-- +ok diff --git a/ext/soap/tests/bugs/bug37083.wsdl b/ext/soap/tests/bugs/bug37083.wsdl new file mode 100755 index 0000000000..2a3b379802 --- /dev/null +++ b/ext/soap/tests/bugs/bug37083.wsdl @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +