com php-src: Fixed support for SOAP_PERSISTENCE_SESSION: ext/soap/soap.c
| From: | Dmitry Stogov | Date: | Thu, 15 May 2014 19:54:36 +0000 |
| Subject: | com php-src: Fixed support for SOAP_PERSISTENCE_SESSION: ext/soap/soap.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-78392@lists.php.net to get a copy of this message | ||
Commit: 7cb20d597f5f27e4770cb21d680010f32ddf1045
Author: Dmitry Stogov <dmitry@zend.com> Thu, 15 May 2014 23:54:36 +0400
Parents: f31aa8434f987ecee622364836ef919e9215873d
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=7cb20d597f5f27e4770cb21d680010f32ddf1045
Log:
Fixed support for SOAP_PERSISTENCE_SESSION
Changed paths:
M ext/soap/soap.c
Diff:
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index 0545bdd..36c6ec5 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -1657,6 +1657,7 @@ PHP_METHOD(SoapServer, handle)
/* If persistent then set soap_obj from from the previous created session (if available) */
if (service->soap_class.persistance == SOAP_PERSISTENCE_SESSION) {
zval *tmp_soap;
+ zval *session_vars;
if (PS(session_status) != php_session_active &&
PS(session_status) != php_session_disabled) {
@@ -1664,7 +1665,10 @@ PHP_METHOD(SoapServer, handle)
}
/* Find the soap object and assign */
- if ((tmp_soap = zend_hash_str_find(Z_ARRVAL(PS(http_session_vars)),
"_bogus_session_name", sizeof("_bogus_session_name")-1)) != NULL &&
+ session_vars = &PS(http_session_vars);
+ ZVAL_DEREF(session_vars);
+ if (Z_TYPE_P(session_vars) == IS_ARRAY &&
+ (tmp_soap = zend_hash_str_find(Z_ARRVAL_P(session_vars), "_bogus_session_name",
sizeof("_bogus_session_name")-1)) != NULL &&
Z_TYPE_P(tmp_soap) == IS_OBJECT &&
Z_OBJCE_P(tmp_soap) == service->soap_class.ce) {
soap_obj = tmp_soap;
@@ -1737,8 +1741,14 @@ PHP_METHOD(SoapServer, handle)
/* If session then update session hash with new object */
if (service->soap_class.persistance == SOAP_PERSISTENCE_SESSION) {
zval *tmp_soap_pp;
- if ((tmp_soap_pp = zend_hash_str_update(Z_ARRVAL(PS(http_session_vars)),
"_bogus_session_name", sizeof("_bogus_session_name")-1, &tmp_soap)) != NULL)
{
+ zval *session_vars = &PS(http_session_vars);
+
+ ZVAL_DEREF(session_vars);
+ if (Z_TYPE_P(session_vars) == IS_ARRAY &&
+ (tmp_soap_pp = zend_hash_str_update(Z_ARRVAL_P(session_vars),
"_bogus_session_name", sizeof("_bogus_session_name")-1, &tmp_soap)) != NULL)
{
soap_obj = tmp_soap_pp;
+ } else {
+ soap_obj = &tmp_soap;
}
} else {
soap_obj = &tmp_soap;