cvs: php4 /ext/session mod_files.c session.c

From: Date: Sun, 03 Feb 2002 03:17:36 +0000
Subject: cvs: php4 /ext/session mod_files.c session.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-9250@lists.php.net to get a copy of this message
yohgaki Sat Feb 2 22:17:36 2002 EDT Modified files: /php4/ext/session mod_files.c session.c Log: Fixed crash when save_path is invalid. Fixed crash when user save handler is incorrectly used. Fixed crash when session read failed. Index: php4/ext/session/mod_files.c diff -u php4/ext/session/mod_files.c:1.65 php4/ext/session/mod_files.c:1.66 --- php4/ext/session/mod_files.c:1.65 Tue Dec 11 10:30:20 2001 +++ php4/ext/session/mod_files.c Sat Feb 2 22:17:35 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mod_files.c,v 1.65 2001/12/11 15:30:20 sebastian Exp $ */ +/* $Id: mod_files.c,v 1.66 2002/02/03 03:17:35 yohgaki Exp $ */ #include "php.h" @@ -123,7 +123,7 @@ } } -static void ps_files_open(ps_files *data, const char *key) +static int ps_files_open(ps_files *data, const char *key) { char buf[MAXPATHLEN]; TSRMLS_FETCH(); @@ -138,7 +138,7 @@ if (!ps_files_valid_key(key) || !ps_files_path_create(buf, sizeof(buf), data, key)) - return; + return FAILURE; data->lastkey = estrdup(key); @@ -153,10 +153,13 @@ if (data->fd != -1) flock(data->fd, LOCK_EX); - if (data->fd == -1) + if (data->fd == -1) { php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf, strerror(errno), errno); + return FAILURE; + } } + return SUCCESS; } static int ps_files_cleanup_dir(const char *dirname, int maxlifetime) @@ -254,7 +257,9 @@ struct stat sbuf; PS_FILES_DATA; - ps_files_open(data, key); + if (ps_files_open(data, key) == FAILURE) + return FAILURE; + if (data->fd < 0) return FAILURE; @@ -283,7 +288,9 @@ long n; PS_FILES_DATA; - ps_files_open(data, key); + if (ps_files_open(data, key) == FAILURE) + return FAILURE; + if (data->fd < 0) return FAILURE; Index: php4/ext/session/session.c diff -u php4/ext/session/session.c:1.271 php4/ext/session/session.c:1.272 --- php4/ext/session/session.c:1.271 Thu Jan 17 13:56:11 2002 +++ php4/ext/session/session.c Sat Feb 2 22:17:35 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session.c,v 1.271 2002/01/17 18:56:11 thies Exp $ */ +/* $Id: session.c,v 1.272 2002/02/03 03:17:35 yohgaki Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -543,19 +543,21 @@ return estrdup(buf); } -static void php_session_initialize(TSRMLS_D) +static int php_session_initialize(TSRMLS_D) { char *val; int vallen; if (PS(mod)->open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE) { php_error(E_ERROR, "Failed to initialize session module"); - return; + return FAILURE; } - if (PS(mod)->read(&PS(mod_data), PS(id), &val, &vallen) == SUCCESS) { - php_session_decode(val, vallen TSRMLS_CC); - efree(val); + if (PS(mod)->read(&PS(mod_data), PS(id), &val, &vallen) == FAILURE) { + return FAILURE; } + php_session_decode(val, vallen TSRMLS_CC); + efree(val); + return SUCCESS; } @@ -946,11 +948,10 @@ } php_session_cache_limiter(TSRMLS_C); - php_session_initialize(TSRMLS_C); - - if (PS(mod_data) && PS(gc_probability) > 0) { + if (php_session_initialize(TSRMLS_C) == SUCCESS && + PS(mod_data) && PS(gc_probability) > 0) { int nrdels = -1; - + nrand = (int) (100.0*php_combined_lcg(TSRMLS_C)); if (nrand < PS(gc_probability)) { PS(mod)->gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels); @@ -961,6 +962,7 @@ } } } + static zend_bool php_session_destroy(TSRMLS_D) {

« previous php.cvs (#9250) next »