/* 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) {
}
/* 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;
/* 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;