tony2001 Thu Sep 30 10:18:25 2004 EDT
Modified files: (Branch: PHP_4_3)
/php-src/ext/session session.c
Log:
MFH: fix segfaults and bug #30282 and suppress compile warnings
http://cvs.php.net/diff.php/php-src/ext/session/session.c?r1=1.336.2.42&r2=1.336.2.43&ty=u
Index: php-src/ext/session/session.c
diff -u php-src/ext/session/session.c:1.336.2.42
php-src/ext/session/session.c:1.336.2.43
--- php-src/ext/session/session.c:1.336.2.42 Thu Sep 2 20:53:46 2004
+++ php-src/ext/session/session.c Thu Sep 30 10:18:25 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session.c,v 1.336.2.42 2004/09/03 00:53:46 iliaa Exp $ */
+/* $Id: session.c,v 1.336.2.43 2004/09/30 14:18:25 tony2001 Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -409,7 +409,7 @@
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);
@@ -489,7 +489,7 @@
if (has_value) {
MAKE_STD_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);
@@ -528,7 +528,11 @@
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.serialize_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.");
@@ -539,6 +543,10 @@
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.serialize_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.");
@@ -977,6 +985,21 @@
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;
}
@@ -1386,9 +1409,15 @@
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)
SEPARATE_ZVAL(args[i]);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php