if (has_value) {
MAKE_STD_ZVAL(current);
- if (php_var_unserialize(¤t, &p, endptr, &var_hash TSRMLS_CC)) {
+ if (php_var_unserialize(¤t, (const unsigned char**)&p, endptr, &var_hash TSRMLS_CC)) {
php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
}
zval_ptr_dtor(¤t);
if (has_value) {
ALLOC_INIT_ZVAL(current);
- if (php_var_unserialize(¤t, &q, endptr, &var_hash TSRMLS_CC)) {
+ if (php_var_unserialize(¤t, (const unsigned char**)&q, endptr, &var_hash TSRMLS_CC)) {
php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
}
zval_ptr_dtor(¤t);
char *ret = NULL;
IF_SESSION_VARS() {
- if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE)
+ if (!PS(serializer)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.save_handler. Failed to encode session object.");
+ ret = NULL;
+ }
+ else if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE)
ret = NULL;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode non-existent session.");
static void php_session_decode(const char *val, int vallen TSRMLS_DC)
{
+ if (!PS(serializer)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.save_handler. Failed to decode session object.");
+ return;
+ }
if (PS(serializer)->decode(val, vallen TSRMLS_CC) == FAILURE) {
php_session_destroy(TSRMLS_C);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to decode session object. Session has been destroyed.");
PS(define_sid) = 1;
PS(send_cookie) = 1;
if (PS(session_status) != php_session_none) {
+
+ if (PS(session_status) == php_session_disabled) {
+ char *value;
+
+ value = zend_ini_string("session.save_handler", sizeof("session.save_handler"), 0);
+
+ if (value) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find save handler %s", value);
+ }
+ else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find unknown save handler");
+ }
+ return;
+ }
+
php_error(E_NOTICE, "A session had already been started - ignoring session_start()");
return;
}
WRONG_PARAM_COUNT;
}
- if (PS(session_status) == php_session_none)
+ if (PS(session_status) == php_session_none || PS(session_status) == php_session_disabled) {
php_session_start(TSRMLS_C);
+ }
+
+ if (PS(session_status) == php_session_disabled) {
+ efree(args);
+ RETURN_FALSE;
+ }
for (i = 0; i < argc; i++) {
if (Z_TYPE_PP(args[i]) == IS_ARRAY)