cvs: php4 /ext/session mod_files.c session.c
| From: | Yasuo Ohgaki | 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)
{