jani            Mon May 18 16:09:51 2009 UTC

  Modified files:              
    /php-src/ext/session        mod_files.c mod_mm.c mod_user.c php_session.h 
                                session.c 
  Log:
  - WS + sync with PHP_5_3 (thanks Ilia & Co.)
  
http://cvs.php.net/viewvc.cgi/php-src/ext/session/mod_files.c?r1=1.123&r2=1.124&diff_format=u
Index: php-src/ext/session/mod_files.c
diff -u php-src/ext/session/mod_files.c:1.123 
php-src/ext/session/mod_files.c:1.124
--- php-src/ext/session/mod_files.c:1.123       Mon Apr  6 11:48:26 2009
+++ php-src/ext/session/mod_files.c     Mon May 18 16:09:51 2009
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 6                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_files.c,v 1.123 2009/04/06 11:48:26 bjori Exp $ */
+/* $Id: mod_files.c,v 1.124 2009/05/18 16:09:51 jani Exp $ */
 
 #include "php.h"
 
@@ -86,7 +86,7 @@
        }
 
        len = p - key;
-       
+
        if (len == 0) {
                ret = 0;
        }
@@ -100,7 +100,7 @@
        const char *p;
        int i;
        int n;
-       
+
        key_len = strlen(key);
        if (key_len <= data->dirdepth ||
                buflen < (strlen(data->basedir) + 2 * data->dirdepth + key_len 
+ 5 + sizeof(FILE_PREFIX))) {
@@ -142,18 +142,18 @@
                        efree(newbuf);
                }
        }
-       
+
        return buf;
 }
 
 #ifndef O_BINARY
-#define O_BINARY 0
-#endif 
+# define O_BINARY 0
+#endif
 
 static void ps_files_close(ps_files *data)
 {
        if (data->fd != -1) {
-#ifdef PHP_WIN32 
+#ifdef PHP_WIN32
                /* On Win32 locked files that are closed without being 
explicitly unlocked
                   will be unlocked only when "system resources become 
available". */
                flock(data->fd, LOCK_UN);
@@ -199,8 +199,8 @@
                                        return;
                                }
                                if (
-                                       S_ISLNK(sbuf.st_mode) && 
-                                        php_check_open_basedir(buf TSRMLS_CC)
+                                       S_ISLNK(sbuf.st_mode) &&
+                                       php_check_open_basedir(buf TSRMLS_CC)
                                ) {
                                        close(data->fd);
                                        return;
@@ -218,8 +218,7 @@
                        }
 #endif
                } else {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "open(%s, 
O_RDWR) failed: %s (%d)", buf, 
-                                       strerror(errno), errno);
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "open(%s, 
O_RDWR) failed: %s (%d)", buf, strerror(errno), errno);
                }
        }
 }
@@ -248,7 +247,7 @@
        /* Prepare buffer (dirname never changes) */
        memcpy(buf, dirname, dirname_len);
        buf[dirname_len] = PHP_DIR_SEPARATOR;
-       
+
        while (php_readdir_r(dir, (struct dirent *) dentry, &entry) == 0 && 
entry) {
                /* does the file start with our prefix? */
                if (!strncmp(entry->d_name, FILE_PREFIX, sizeof(FILE_PREFIX) - 
1)) {
@@ -263,7 +262,7 @@
                                buf[dirname_len + entry_len + 1] = '\0';
 
                                /* check whether its last access was more than 
maxlifet ago */
-                               if (VCWD_STAT(buf, &sbuf) == 0 && 
+                               if (VCWD_STAT(buf, &sbuf) == 0 &&
 #ifdef NETWARE
                                                (now - sbuf.st_mtime.tv_sec) > 
maxlifetime) {
 #else
@@ -300,7 +299,7 @@
                        return FAILURE;
                }
        }
-       
+
        /* split up input parameter */
        last = save_path;
        p = strchr(save_path, ';');
@@ -320,7 +319,7 @@
                        return FAILURE;
                }
        }
-       
+
        if (argc > 2) {
                errno = 0;
                filemode = strtol(argv[1], NULL, 8);
@@ -332,15 +331,15 @@
        save_path = argv[argc - 1];
 
        data = ecalloc(1, sizeof(*data));
-       
+
        data->fd = -1;
        data->dirdepth = dirdepth;
        data->filemode = filemode;
        data->basedir_len = strlen(save_path);
        data->basedir = estrndup(save_path, data->basedir_len);
-       
+
        PS_SET_MOD_DATA(data);
-       
+
        return SUCCESS;
 }
 
@@ -401,7 +400,7 @@
                efree(*val);
                return FAILURE;
        }
-       
+
        return SUCCESS;
 }
 
@@ -415,11 +414,8 @@
                return FAILURE;
        }
 
-       /* 
-        * truncate file, if the amount of new data is smaller than
-        * the existing data set.
-        */
-       
+       /* Truncate file if the amount of new data is smaller than the existing 
data set. */
+
        if (vallen < (int)data->st_size) {
                ftruncate(data->fd, 0);
        }
@@ -454,11 +450,10 @@
 
        if (data->fd != -1) {
                ps_files_close(data);
-       
+
                if (VCWD_UNLINK(buf) == -1) {
                        /* This is a little safety check for instances when we 
are dealing with a regenerated session
-                        * that was not yet written to disk
-                        */
+                        * that was not yet written to disk. */
                        if (!VCWD_ACCESS(buf, F_OK)) {
                                return FAILURE;
                        }
@@ -468,14 +463,14 @@
        return SUCCESS;
 }
 
-PS_GC_FUNC(files) 
+PS_GC_FUNC(files)
 {
        PS_FILES_DATA;
-       
+
        /* we don't perform any cleanup, if dirdepth is larger than 0.
           we return SUCCESS, since all cleanup should be handled by
           an external entity (i.e. find -ctime x | xargs rm) */
-          
+
        if (data->dirdepth == 0) {
                *nrdels = ps_files_cleanup_dir(data->basedir, maxlifetime 
TSRMLS_CC);
        }
http://cvs.php.net/viewvc.cgi/php-src/ext/session/mod_mm.c?r1=1.53&r2=1.54&diff_format=u
Index: php-src/ext/session/mod_mm.c
diff -u php-src/ext/session/mod_mm.c:1.53 php-src/ext/session/mod_mm.c:1.54
--- php-src/ext/session/mod_mm.c:1.53   Tue Mar 10 23:39:32 2009
+++ php-src/ext/session/mod_mm.c        Mon May 18 16:09:51 2009
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 6                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_mm.c,v 1.53 2009/03/10 23:39:32 helly Exp $ */
+/* $Id: mod_mm.c,v 1.54 2009/05/18 16:09:51 jani Exp $ */
 
 #include "php.h"
 
@@ -42,9 +42,7 @@
 /* For php_uint32 */
 #include "ext/standard/basic_functions.h"
 
-/*
- * this list holds all data associated with one session 
- */
+/* This list holds all data associated with one session. */
 
 typedef struct ps_sd {
        struct ps_sd *next;
@@ -67,21 +65,21 @@
 static ps_mm *ps_mm_instance = NULL;
 
 #if 0
-#define ps_mm_debug(a) printf a
+# define ps_mm_debug(a) printf a
 #else
-#define ps_mm_debug(a)
+# define ps_mm_debug(a)
 #endif
 
 static inline php_uint32 ps_sd_hash(const char *data, int len)
 {
        php_uint32 h;
        const char *e = data + len;
-       
+
        for (h = 2166136261U; data < e; ) {
                h *= 16777619;
                h ^= *data++;
        }
-       
+
        return h;
 }
 
@@ -91,10 +89,10 @@
        ps_sd **nhash;
        ps_sd **ohash, **ehash;
        ps_sd *ps, *next;
-       
+
        nmax = ((data->hash_max + 1) << 1) - 1;
        nhash = mm_calloc(data->mm, nmax + 1, sizeof(*data->hash));
-       
+
        if (!nhash) {
                /* no further memory to expand hash table */
                return;
@@ -119,9 +117,9 @@
        php_uint32 hv, slot;
        ps_sd *sd;
        int keylen;
-       
+
        keylen = strlen(key);
-       
+
        sd = mm_malloc(data->mm, sizeof(ps_sd) + keylen);
        if (!sd) {
                TSRMLS_FETCH();
@@ -132,24 +130,25 @@
 
        hv = ps_sd_hash(key, keylen);
        slot = hv & data->hash_max;
-       
+
        sd->ctime = 0;
        sd->hv = hv;
        sd->data = NULL;
        sd->alloclen = sd->datalen = 0;
-       
+
        memcpy(sd->key, key, keylen + 1);
-       
+
        sd->next = data->hash[slot];
        data->hash[slot] = sd;
 
        data->hash_cnt++;
-       
+
        if (!sd->next) {
-               if (data->hash_cnt >= data->hash_max)
+               if (data->hash_cnt >= data->hash_max) {
                        hash_split(data);
+               }
        }
-       
+
        ps_mm_debug(("inserting %s(%p) into slot %d\n", key, sd, slot));
 
        return sd;
@@ -170,7 +169,7 @@
                for (prev = data->hash[slot]; prev->next != sd; prev = 
prev->next);
                prev->next = sd->next;
        }
-               
+
        data->hash_cnt--;
 
        if (sd->data) {
@@ -187,7 +186,7 @@
 
        hv = ps_sd_hash(key, strlen(key));
        slot = hv & data->hash_max;
-       
+
        for (prev = NULL, ret = data->hash[slot]; ret; prev = ret, ret = 
ret->next) {
                if (ret->hv == hv && !strcmp(ret->key, key)) {
                        break;
@@ -196,7 +195,6 @@
 
        if (ret && rw && ret != data->hash[slot]) {
                /* Move the entry to the top of the linked list */
-               
                if (prev) {
                        prev->next = ret->next;
                }
@@ -206,7 +204,7 @@
        }
 
        ps_mm_debug(("lookup(%s): ret=%p,hv=%u,slot=%d\n", key, ret, hv, slot));
-       
+
        return ret;
 }
 
@@ -243,7 +241,9 @@
        /* This function is called during each module shutdown,
           but we must not release the shared memory pool, when
           an Apache child dies! */
-       if (data->owner != getpid()) return;
+       if (data->owner != getpid()) {
+               return;
+       }
 
        for (h = 0; h < data->hash_max + 1; h++) {
                for (sd = data->hash[h]; sd; sd = next) {
@@ -251,7 +251,7 @@
                        ps_sd_destroy(data, sd);
                }
        }
-       
+
        mm_free(data->mm, data->hash);
        mm_destroy(data->mm);
        free(data);
@@ -261,41 +261,44 @@
 {
        int save_path_len = strlen(PS(save_path));
        int mod_name_len = strlen(sapi_module.name);
+       int euid_len;
        char *ps_mm_path, euid[30];
        int ret;
 
        ps_mm_instance = calloc(sizeof(*ps_mm_instance), 1);
-       if (!ps_mm_instance) {
+       if (!ps_mm_instance) {
                return FAILURE;
        }
 
-       if (!snprintf(euid, sizeof(euid), "%d", geteuid())) {
+       if (!(euid_len = slprintf(euid, sizeof(euid), "%d", geteuid()))) {
                return FAILURE;
        }
-               
-       /* Directory + '/' + File + Module Name + Effective UID + \0 */ 
-       ps_mm_path = 
emalloc(save_path_len+1+sizeof(PS_MM_FILE)+mod_name_len+strlen(euid)+1);
-       
-       memcpy(ps_mm_path, PS(save_path), save_path_len + 1);
-       if (save_path_len > 0 && ps_mm_path[save_path_len - 1] != 
DEFAULT_SLASH) {
+
+       /* Directory + '/' + File + Module Name + Effective UID + \0 */
+       ps_mm_path = emalloc(save_path_len + 1 + (sizeof(PS_MM_FILE) - 1) + 
mod_name_len + euid_len + 1);
+
+       memcpy(ps_mm_path, PS(save_path), save_path_len);
+       if (PS(save_path)[save_path_len - 1] != DEFAULT_SLASH) {
                ps_mm_path[save_path_len] = DEFAULT_SLASH;
-               ps_mm_path[save_path_len+1] = '\0';
+               save_path_len++;
        }
+       memcpy(ps_mm_path + save_path_len, PS_MM_FILE, sizeof(PS_MM_FILE) - 1);
+       save_path_len += sizeof(PS_MM_FILE) - 1;
+       memcpy(ps_mm_path + save_path_len, sapi_module.name, mod_name_len);
+       save_path_len += mod_name_len;
+       memcpy(ps_mm_path + save_path_len, euid, euid_len);
+       ps_mm_path[save_path_len + euid_len] = '\0';
 
-       strcat(ps_mm_path, PS_MM_FILE);
-       strcat(ps_mm_path, sapi_module.name);
-       strcat(ps_mm_path, euid);
-       
        ret = ps_mm_initialize(ps_mm_instance, ps_mm_path);
-               
+
        efree(ps_mm_path);
-   
+
        if (ret != SUCCESS) {
                free(ps_mm_instance);
                ps_mm_instance = NULL;
                return FAILURE;
        }
-       
+
        php_session_register_module(&ps_mod_mm);
        return SUCCESS;
 }
@@ -312,13 +315,12 @@
 PS_OPEN_FUNC(mm)
 {
        ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance));
-       
+
        if (!ps_mm_instance) {
                return FAILURE;
        }
-       
        PS_SET_MOD_DATA(ps_mm_instance);
-       
+
        return SUCCESS;
 }
 
@@ -336,7 +338,7 @@
        int ret = FAILURE;
 
        mm_lock(data->mm, MM_LOCK_RD);
-       
+
        sd = ps_sd_lookup(data, key, 0);
        if (sd) {
                *vallen = sd->datalen;
@@ -347,7 +349,7 @@
        }
 
        mm_unlock(data->mm);
-       
+
        return ret;
 }
 
@@ -386,7 +388,7 @@
        }
 
        mm_unlock(data->mm);
-       
+
        return sd ? SUCCESS : FAILURE;
 }
 
@@ -394,29 +396,29 @@
 {
        PS_MM_DATA;
        ps_sd *sd;
-       
+
        mm_lock(data->mm, MM_LOCK_RW);
-       
+
        sd = ps_sd_lookup(data, key, 0);
        if (sd) {
                ps_sd_destroy(data, sd);
        }
 
        mm_unlock(data->mm);
-       
+
        return SUCCESS;
 }
 
-PS_GC_FUNC(mm) 
+PS_GC_FUNC(mm)
 {
        PS_MM_DATA;
        time_t limit;
        ps_sd **ohash, **ehash;
        ps_sd *sd, *next;
-       
+
        *nrdels = 0;
        ps_mm_debug(("gc\n"));
-               
+
        time(&limit);
 
        limit -= maxlifetime;
@@ -436,7 +438,7 @@
        }
 
        mm_unlock(data->mm);
-       
+
        return SUCCESS;
 }
 
http://cvs.php.net/viewvc.cgi/php-src/ext/session/mod_user.c?r1=1.37&r2=1.38&diff_format=u
Index: php-src/ext/session/mod_user.c
diff -u php-src/ext/session/mod_user.c:1.37 php-src/ext/session/mod_user.c:1.38
--- php-src/ext/session/mod_user.c:1.37 Tue Mar 10 23:39:32 2009
+++ php-src/ext/session/mod_user.c      Mon May 18 16:09:51 2009
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 6                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_user.c,v 1.37 2009/03/10 23:39:32 helly Exp $ */
+/* $Id: mod_user.c,v 1.38 2009/05/18 16:09:51 jani Exp $ */
 
 #include "php.h"
 #include "php_session.h"
@@ -26,34 +26,31 @@
        PS_MOD(user)
 };
 
-#define SESS_ZVAL_LONG(val, a)                                         \
-{                                                                              
        \
-       MAKE_STD_ZVAL(a);                                               \
-       ZVAL_LONG(a, val);                                              \
+#define SESS_ZVAL_LONG(val, a)                                         \
+{                                                                              
                        \
+       MAKE_STD_ZVAL(a);                                                       
        \
+       ZVAL_LONG(a, val);                                                      
        \
 }
 
-
-#define SESS_ZVAL_STRINGN(vl, ln, a)                   \
-{                                                                              
        \
-       MAKE_STD_ZVAL(a);                                               \
-       ZVAL_UTF8_STRINGL(a, vl, ln, ZSTR_DUPLICATE);   \
+#define SESS_ZVAL_STRING(vl, a)                                                
\
+{                                                                              
                        \
+       char *__vl = vl;                                                        
        \
+       SESS_ZVAL_STRINGN(__vl, strlen(__vl), a);               \
 }
 
-#define SESS_ZVAL_STRING(vl, a)                                        \
-{                                                                              
        \
-       char *__vl = vl;                                                        
\
-       SESS_ZVAL_STRINGN(__vl, strlen(__vl), a);       \
+#define SESS_ZVAL_STRINGN(vl, ln, a)                           \
+{                                                                              
                        \
+       MAKE_STD_ZVAL(a);                                                       
        \
+       ZVAL_UTF8_STRINGL(a, vl, ln, ZSTR_DUPLICATE);   \
 }
 
-
 static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC)
 {
        int i;
        zval *retval = NULL;
-       
+
        MAKE_STD_ZVAL(retval);
-       if (call_user_function(EG(function_table), NULL, func, retval, 
-                               argc, argv TSRMLS_CC) == FAILURE) {
+       if (call_user_function(EG(function_table), NULL, func, retval, argc, 
argv TSRMLS_CC) == FAILURE) {
                zval_ptr_dtor(&retval);
                retval = NULL;
        }
@@ -66,7 +63,7 @@
 }
 
 #define STDVARS1                                                       \
-       zval *retval;                                                   \
+       zval *retval;                                                   \
        int ret = FAILURE
 
 #define STDVARS                                                                
\
@@ -76,12 +73,12 @@
 
 #define PSF(a) PS(mod_user_names).name.ps_##a
 
-#define FINISH                                                                 
\
+#define FINISH                                                         \
        if (retval) {                                                   \
                convert_to_long(retval);                        \
-               ret = Z_LVAL_P(retval);                 \
+               ret = Z_LVAL_P(retval);                         \
                zval_ptr_dtor(&retval);                         \
-       }                                                                       
        \
+       }                                                                       
        \
        return ret
 
 PS_OPEN_FUNC(user)
@@ -89,21 +86,20 @@
        zval *args[2];
        static char dummy = 0;
        STDVARS1;
-       
+
        SESS_ZVAL_STRING((char*)save_path, args[0]);
        SESS_ZVAL_STRING((char*)session_name, args[1]);
-       
+
        retval = ps_call_handler(PSF(open), 2, args TSRMLS_CC);
        if (retval) {
                /* This is necessary to fool the session module. Yes, it's safe 
to
                 * use a static. Neither mod_user nor the session module itself 
will
                 * ever touch this pointer. It could be set to 0xDEADBEEF for 
all the
                 * difference it makes, but for the sake of paranoia it's set 
to some
-                * valid value.
-               */
+                * valid value. */
                PS_SET_MOD_DATA(&dummy);
        }
-       
+
        FINISH;
 }
 
@@ -126,7 +122,7 @@
        SESS_ZVAL_STRING((char*)key, args[0]);
 
        retval = ps_call_handler(PSF(read), 1, args TSRMLS_CC);
-       
+
        if (retval) {
                if (Z_TYPE_P(retval) == IS_STRING) {
                        *val = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
@@ -148,7 +144,6 @@
                                ret = SUCCESS;
                        }
                }
-
                zval_ptr_dtor(&retval);
        }
 
@@ -159,7 +154,7 @@
 {
        zval *args[2];
        STDVARS;
-       
+
        SESS_ZVAL_STRING((char*)key, args[0]);
        SESS_ZVAL_STRINGN((char*)val, vallen, args[1]);
 
http://cvs.php.net/viewvc.cgi/php-src/ext/session/php_session.h?r1=1.121&r2=1.122&diff_format=u
Index: php-src/ext/session/php_session.h
diff -u php-src/ext/session/php_session.h:1.121 
php-src/ext/session/php_session.h:1.122
--- php-src/ext/session/php_session.h:1.121     Tue Mar 10 23:39:32 2009
+++ php-src/ext/session/php_session.h   Mon May 18 16:09:51 2009
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_session.h,v 1.121 2009/03/10 23:39:32 helly Exp $ */
+/* $Id: php_session.h,v 1.122 2009/05/18 16:09:51 jani Exp $ */
 
 #ifndef PHP_SESSION_H
 #define PHP_SESSION_H
@@ -245,32 +245,37 @@
 
 /* (Possibly) needed for BC (e.g. by external modules using the session 
registry) */
 #define PS_ENCODE_LOOP(code) do {                                              
                        \
-               HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars)); \
+               HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars));             
        \
+               int key_type;                                                   
                                        \
                                                                                
                                                        \
-               for (zend_hash_internal_pointer_reset(_ht);                     
\
-                               zend_hash_get_current_key_ex(_ht, &key, 
&key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \
-                               zend_hash_move_forward(_ht)) {                  
        \
-                               key_length--;                                   
                                        \
-                       if (php_get_session_var(key.s, key_length, &struc 
TSRMLS_CC) == SUCCESS) { \
+               for (zend_hash_internal_pointer_reset(_ht);                     
                \
+                               (key_type = zend_hash_get_current_key_ex(_ht, 
&key, &key_length, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT; \
+                                       zend_hash_move_forward(_ht)) {          
                        \
+                       if (key_type == HASH_KEY_IS_LONG) {                     
                        \
+                               php_error_docref(NULL TSRMLS_CC, E_NOTICE, 
"Skipping numeric key %ld", num_key);        \
+                               continue;                                       
                                                \
+                       }                                                       
                                                        \
+                       key_length--;                                           
                                        \
+                       if (php_get_session_var(key, key_length, &struc 
TSRMLS_CC) == SUCCESS) {        \
                                code;                                           
                                                \
                        }                                                       
                                                        \
                }                                                               
                                                        \
        } while(0)
 
-#define PS_UENCODE_LOOP(code) do { \
-               int key_type;   \
-               HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars)); \
-               HashPosition _pos;      \
+#define PS_UENCODE_LOOP(code) do {                                             
                        \
+               HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars));             
        \
+               HashPosition _pos;                                              
                                        \
+               int key_type;                                                   
                                        \
                                                                                
                                                        \
-               for (zend_hash_internal_pointer_reset_ex(_ht, &_pos);           
        \
+               for (zend_hash_internal_pointer_reset_ex(_ht, &_pos);           
\
                                (key_type = zend_hash_get_current_key_ex(_ht, 
&key, &key_length, &num_key, 0, &_pos)) != HASH_KEY_NON_EXISTANT; \
-                               zend_hash_move_forward_ex(_ht, &_pos)) {        
                        \
+                                       zend_hash_move_forward_ex(_ht, &_pos)) 
{                \
                        if (key_type != HASH_KEY_IS_STRING && key_type != 
HASH_KEY_IS_UNICODE) { break; }       \
-                       key_length--;                                           
                                \
-                       struc = NULL; \
+                       key_length--;                                           
                                        \
+                       struc = NULL;                                           
                                        \
                        zend_hash_get_current_data_ex(_ht, (void**)&struc, 
&_pos);      \
-\
-                       code;                                                   
                                        \
+                                                                               
                                                        \
+                       code;                                                   
                                                \
                }                                                               
                                                        \
        } while(0)
 
http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.502&r2=1.503&diff_format=u
Index: php-src/ext/session/session.c
diff -u php-src/ext/session/session.c:1.502 php-src/ext/session/session.c:1.503
--- php-src/ext/session/session.c:1.502 Thu Mar 26 20:02:12 2009
+++ php-src/ext/session/session.c       Mon May 18 16:09:51 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: session.c,v 1.502 2009/03/26 20:02:12 felipe Exp $ */
+/* $Id: session.c,v 1.503 2009/05/18 16:09:51 jani Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -137,8 +137,7 @@
        zval **sym_track = NULL;
 
        IF_SESSION_VARS() {
-               zend_rt_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, 
namelen + 1,
-                               (void *) &sym_track);
+               zend_rt_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, 
namelen + 1, (void *) &sym_track);
        } else {
                return;
        }
@@ -165,8 +164,7 @@
        int ret = FAILURE;
 
        IF_SESSION_VARS() {
-               ret = zend_rt_hash_find(Z_ARRVAL_P(PS(http_session_vars)), 
name, 
-                               namelen+1, (void **) state_var);
+               ret = zend_rt_hash_find(Z_ARRVAL_P(PS(http_session_vars)), 
name, namelen + 1, (void **) state_var);
        }
        return ret;
 }
@@ -203,7 +201,7 @@
                        ret = NULL;
                }
        } else {
-                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode 
non-existent session");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode 
non-existent session");
        }
        return ret;
 }
@@ -294,17 +292,15 @@
 
        gettimeofday(&tv, NULL);
 
-       if (zend_ascii_hash_find(&EG(symbol_table), "_SERVER",
-                               sizeof("_SERVER"), (void **) &array) == SUCCESS 
&&
+       if (zend_ascii_hash_find(&EG(symbol_table), "_SERVER", 
sizeof("_SERVER"), (void **) &array) == SUCCESS &&
                Z_TYPE_PP(array) == IS_ARRAY &&
-               zend_ascii_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR",
-                               sizeof("REMOTE_ADDR"), (void **) &token) == 
SUCCESS) {
+               zend_ascii_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR", 
sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS
+       ) {
                remote_addr = Z_STRVAL_PP(token);
        }
 
        /* maximum 15+19+19+10 bytes */
-       spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", 
-                       tv.tv_sec, (long int)tv.tv_usec, 
php_combined_lcg(TSRMLS_C) * 10);
+       spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", 
tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
 
        switch (PS(hash_func)) {
                case PS_HASH_FUNC_MD5:
@@ -443,8 +439,7 @@
        /* Question: if you create a SID here, should you also try to read data?
         * I'm not sure, but while not doing so will remove one session 
operation
         * it could prove usefull for those sites which wish to have "default"
-        * session information
-        */
+        * session information. */
        php_session_track_init(TSRMLS_C);
        PS(invalid_session_id) = 0;
        if (PS(mod)->s_read(&PS(mod_data), PS(id), &val, &vallen TSRMLS_CC) == 
SUCCESS) {
@@ -689,15 +684,11 @@
        STD_PHP_INI_ENTRY("session.hash_bits_per_character", "4",    
PHP_INI_ALL, OnUpdateLong,   hash_bits_per_character, php_ps_globals, 
ps_globals)
 
        /* Upload progress */
-       STD_PHP_INI_BOOLEAN("session.upload_progress.enabled",
-                                                       "1",     
ZEND_INI_PERDIR, OnUpdateBool,        rfc1867_enabled, php_ps_globals, 
ps_globals)
-       STD_PHP_INI_ENTRY("session.upload_progress.prefix",
-                                            "upload_progress_", 
ZEND_INI_PERDIR, OnUpdateUTF8String,  rfc1867_prefix,  php_ps_globals, 
ps_globals)
-       STD_PHP_INI_ENTRY("session.upload_progress.name",
-                                 "PHP_SESSION_UPLOAD_PROGRESS", 
ZEND_INI_PERDIR, OnUpdateUTF8String,  rfc1867_name,    php_ps_globals, 
ps_globals)
-       STD_PHP_INI_ENTRY("session.upload_progress.freq",  "1%", 
ZEND_INI_PERDIR, OnUpdateRfc1867Freq, rfc1867_freq,    php_ps_globals, 
ps_globals)
-       STD_PHP_INI_ENTRY("session.upload_progress.min_freq",
-                                                          "0",  
ZEND_INI_PERDIR, OnUpdateReal,        rfc1867_min_freq,php_ps_globals, 
ps_globals)
+       STD_PHP_INI_BOOLEAN("session.upload_progress.enabled",  "1",            
                                        ZEND_INI_PERDIR, OnUpdateBool,        
rfc1867_enabled, php_ps_globals, ps_globals)
+       STD_PHP_INI_ENTRY("session.upload_progress.prefix",             
"upload_progress_",                             ZEND_INI_PERDIR, 
OnUpdateUTF8String,  rfc1867_prefix,  php_ps_globals, ps_globals)
+       STD_PHP_INI_ENTRY("session.upload_progress.name",               
"PHP_SESSION_UPLOAD_PROGRESS",  ZEND_INI_PERDIR, OnUpdateUTF8String,  
rfc1867_name,    php_ps_globals, ps_globals)
+       STD_PHP_INI_ENTRY("session.upload_progress.freq",               "1%", 
ZEND_INI_PERDIR, OnUpdateRfc1867Freq, rfc1867_freq,    php_ps_globals, 
ps_globals)
+       STD_PHP_INI_ENTRY("session.upload_progress.min_freq",   "0",  
ZEND_INI_PERDIR, OnUpdateReal,        rfc1867_min_freq,php_ps_globals, 
ps_globals)
 
        /* Commented out until future discussion */
        /* PHP_INI_ENTRY("session.encode_sources", "globals,track", 
PHP_INI_ALL, NULL) */
@@ -920,10 +911,7 @@
        PS_SERIALIZER_ENTRY(php_binary)
 };
 
-PHPAPI int php_session_register_serializer(
-               const char *name, 
-               int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
-               int (*decode)(PS_SERIALIZER_DECODE_ARGS)) /* {{{ */
+PHPAPI int php_session_register_serializer(const char *name, int 
(*encode)(PS_SERIALIZER_ENCODE_ARGS), int (*decode)(PS_SERIALIZER_DECODE_ARGS)) 
/* {{{ */
 {
        int ret = -1;
        int i;
@@ -1008,9 +996,9 @@
        }
 
        n = slprintf(buf, sizeof(buf), "%s, %02d %s %d %02d:%02d:%02d GMT", /* 
SAFE */
-                               week_days[tm.tm_wday], tm.tm_mday, 
-                               month_names[tm.tm_mon], tm.tm_year + 1900, 
-                               tm.tm_hour, tm.tm_min, 
+                               week_days[tm.tm_wday], tm.tm_mday,
+                               month_names[tm.tm_mon], tm.tm_year + 1900,
+                               tm.tm_hour, tm.tm_min,
                                tm.tm_sec);
        memcpy(ubuf, buf, n);
        ubuf[n] = '\0';
@@ -1106,8 +1094,7 @@
                int output_start_lineno = php_output_get_start_lineno(TSRMLS_C);
 
                if (output_start_filename) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cache limiter - headers already sent (output started at %s:%d)",
-                               output_start_filename, output_start_lineno);
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cache limiter - headers already sent (output started at %s:%d)", 
output_start_filename, output_start_lineno);
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cache limiter - headers already sent");
                }
@@ -1147,8 +1134,7 @@
                int output_start_lineno = php_output_get_start_lineno(TSRMLS_C);
 
                if (output_start_filename) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cookie - headers already sent by (output started at %s:%d)",
-                               output_start_filename, output_start_lineno);
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cookie - headers already sent by (output started at %s:%d)", 
output_start_filename, output_start_lineno);
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot 
send session cookie - headers already sent");
                }
@@ -1318,17 +1304,14 @@
 
        lensess = strlen(PS(session_name));
 
-       /*
-        * Cookies are preferred, because initially
-        * cookie and get variables will be available. 
-        */
+       /* Cookies are preferred, because initially
+        * cookie and get variables will be available. */
 
        if (!PS(id)) {
-               if (PS(use_cookies) && zend_ascii_hash_find(&EG(symbol_table), 
"_COOKIE",
-                                       sizeof("_COOKIE"), (void **) &data) == 
SUCCESS &&
+               if (PS(use_cookies) && zend_ascii_hash_find(&EG(symbol_table), 
"_COOKIE", sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
                                Z_TYPE_PP(data) == IS_ARRAY &&
-                               zend_ascii_hash_find(Z_ARRVAL_PP(data), 
PS(session_name),
-                                       lensess + 1, (void **) &ppid) == 
SUCCESS) {
+                               zend_ascii_hash_find(Z_ARRVAL_PP(data), 
PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+               ) {
                        PPID2SID;
                        PS(apply_trans_sid) = 0;
                        PS(send_cookie) = 0;
@@ -1336,36 +1319,34 @@
                }
 
                if (!PS(use_only_cookies) && !PS(id) &&
-                               zend_ascii_hash_find(&EG(symbol_table), "_GET",
-                                       sizeof("_GET"), (void **) &data) == 
SUCCESS &&
+                               zend_ascii_hash_find(&EG(symbol_table), "_GET", 
sizeof("_GET"), (void **) &data) == SUCCESS &&
                                Z_TYPE_PP(data) == IS_ARRAY &&
-                               zend_rt_hash_find(Z_ARRVAL_PP(data), 
PS(session_name),
-                                       lensess + 1, (void **) &ppid) == 
SUCCESS) {
+                               zend_rt_hash_find(Z_ARRVAL_PP(data), 
PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+               ) {
                        PPID2SID;
                        PS(send_cookie) = 0;
                }
 
                if (!PS(use_only_cookies) && !PS(id) &&
-                               zend_ascii_hash_find(&EG(symbol_table), "_POST",
-                                       sizeof("_POST"), (void **) &data) == 
SUCCESS &&
+                               zend_ascii_hash_find(&EG(symbol_table), 
"_POST", sizeof("_POST"), (void **) &data) == SUCCESS &&
                                Z_TYPE_PP(data) == IS_ARRAY &&
-                               zend_rt_hash_find(Z_ARRVAL_PP(data), 
PS(session_name),
-                                       lensess + 1, (void **) &ppid) == 
SUCCESS) {
+                               zend_rt_hash_find(Z_ARRVAL_PP(data), 
PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+               ) {
                        PPID2SID;
                        PS(send_cookie) = 0;
                }
        }
 
-       /* check the REQUEST_URI symbol for a string of the form
-          '<session-name>=<session-id>' to allow URLs of the form
-          http://yoursite/<session-name>=<session-id>/script.php */
+       /* Check the REQUEST_URI symbol for a string of the form
+        * '<session-name>=<session-id>' to allow URLs of the form
+        * http://yoursite/<session-name>=<session-id>/script.php */
 
        if (!PS(use_only_cookies) && !PS(id) && 
PG(http_globals)[TRACK_VARS_SERVER] &&
-                       
zend_ascii_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), 
"REQUEST_URI",
-                               sizeof("REQUEST_URI"), (void **) &data) == 
SUCCESS &&
+                       
zend_ascii_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), 
"REQUEST_URI", sizeof("REQUEST_URI"), (void **) &data) == SUCCESS &&
                        Z_TYPE_PP(data) == IS_STRING &&
                        (p = strstr(Z_STRVAL_PP(data), PS(session_name))) &&
-                       p[lensess] == '=') {
+                       p[lensess] == '='
+       ) {
                char *q;
 
                p += lensess + 1;
@@ -1375,17 +1356,17 @@
                }
        }
 
-       /* check whether the current request was referred to by
-          an external site which invalidates the previously found id */
+       /* Check whether the current request was referred to by
+        * an external site which invalidates the previously found id. */
 
        if (PS(id) &&
                        PS(extern_referer_chk)[0] != '\0' &&
                        PG(http_globals)[TRACK_VARS_SERVER] &&
-                       
zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_REFERER",
-                               sizeof("HTTP_REFERER"), (void **) &data) == 
SUCCESS &&
+                       
zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_REFERER", 
sizeof("HTTP_REFERER"), (void **) &data) == SUCCESS &&
                        Z_TYPE_PP(data) == IS_STRING &&
                        Z_STRLEN_PP(data) != 0 &&
-                       strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == 
NULL) {
+                       strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == 
NULL
+       ) {
                efree(PS(id));
                PS(id) = NULL;
                PS(send_cookie) = 1;
@@ -1452,18 +1433,19 @@
    Set session cookie parameters */
 static PHP_FUNCTION(session_set_cookie_params)
 {
-       /* lifetime is really a numeric, but the alter_ini_entry method wants a 
string */
-       char *lifetime, *path = NULL, *domain = NULL;
-       int lifetime_len, path_len, domain_len, argc = ZEND_NUM_ARGS();
+       zval **lifetime = NULL;
+       char *path = NULL, *domain = NULL;
+       int path_len, domain_len, argc = ZEND_NUM_ARGS();
        zend_bool secure = 0, httponly = 0;
 
        if (!PS(use_cookies) ||
-               zend_parse_parameters(argc TSRMLS_CC, "s|ssbb", &lifetime, 
&lifetime_len, &path, &path_len,
-                                               &domain, &domain_len, &secure, 
&httponly) == FAILURE) {
+               zend_parse_parameters(argc TSRMLS_CC, "Z|ssbb", &lifetime, 
&path, &path_len, &domain, &domain_len, &secure, &httponly) == FAILURE) {
                return;
        }
 
-       zend_alter_ini_entry("session.cookie_lifetime", 
sizeof("session.cookie_lifetime"), lifetime, lifetime_len, PHP_INI_USER, 
PHP_INI_STAGE_RUNTIME);
+       convert_to_string_ex(lifetime);
+
+       zend_alter_ini_entry("session.cookie_lifetime", 
sizeof("session.cookie_lifetime"), Z_STRVAL_PP(lifetime), 
Z_STRLEN_PP(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
 
        if (path) {
                zend_alter_ini_entry("session.cookie_path", 
sizeof("session.cookie_path"), path, path_len, PHP_INI_USER, 
PHP_INI_STAGE_RUNTIME);
@@ -1482,7 +1464,7 @@
 /* }}} */
 
 /* {{{ proto array session_get_cookie_params(void) U
-   Return the session cookie parameters */ 
+   Return the session cookie parameters */
 static PHP_FUNCTION(session_get_cookie_params)
 {
        if (zend_parse_parameters_none() == FAILURE) {
@@ -1730,18 +1712,18 @@
    Return the current cache expire. If new_cache_expire is given, the current 
cache_expire is replaced with new_cache_expire */
 static PHP_FUNCTION(session_cache_expire)
 {
-       /* Expires is really a numeric, but the alter_ini_entry method wants a 
string */
-       char *expires = NULL;
-       int expires_len;
+       zval **expires = NULL;
+       int argc = ZEND_NUM_ARGS();
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s&", &expires, 
&expires_len, UG(utf8_conv)) == FAILURE) {
+       if (zend_parse_parameters(argc TSRMLS_CC, "|Z", &expires) == FAILURE) {
                return;
        }
 
        RETVAL_LONG(PS(cache_expire));
 
-       if (expires) {
-               zend_alter_ini_entry("session.cache_expire", 
sizeof("session.cache_expire"), expires, expires_len, ZEND_INI_USER, 
ZEND_INI_STAGE_RUNTIME);
+       if (argc == 1) {
+               convert_to_string_ex(expires);
+               zend_alter_ini_entry("session.cache_expire", 
sizeof("session.cache_expire"), Z_STRVAL_PP(expires), Z_STRLEN_PP(expires), 
ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
        }
 }
 /* }}} */
@@ -1934,7 +1916,7 @@
        PHP_FE(session_get_cookie_params, arginfo_session_void)
        PHP_FE(session_write_close,       arginfo_session_void)
        PHP_FALIAS(session_commit, session_write_close, arginfo_session_void)
-       {NULL, NULL, NULL} 
+       {NULL, NULL, NULL}
 };
 /* }}} */
 
@@ -2115,9 +2097,9 @@
 
        if (PS(use_cookies)) {
                sapi_module.treat_data(PARSE_COOKIE, NULL, NULL TSRMLS_CC);
-               if (PG(http_globals)[TRACK_VARS_COOKIE]
-                       && 
zend_u_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), 
Z_TYPE(progress->sname), Z_UNIVAL(progress->sname), 
Z_UNILEN(progress->sname)+1, (void **)&ppid) == SUCCESS) {
-
+               if (PG(http_globals)[TRACK_VARS_COOKIE] &&
+                       
zend_u_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), 
Z_TYPE(progress->sname), Z_UNIVAL(progress->sname), 
Z_UNILEN(progress->sname)+1, (void **)&ppid) == SUCCESS
+               ) {
                        zval_dtor(&progress->sid);
                        ZVAL_ZVAL(&progress->sid, *ppid, 1, 0);
                        convert_to_string(&progress->sid);
@@ -2129,9 +2111,9 @@
                return;
        }
        sapi_module.treat_data(PARSE_GET, NULL, NULL TSRMLS_CC);
-       if (PG(http_globals)[TRACK_VARS_GET]
-               && 
zend_u_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), 
Z_TYPE(progress->sname), Z_UNIVAL(progress->sname), 
Z_UNILEN(progress->sname)+1, (void **)&ppid) == SUCCESS) {
-
+       if (PG(http_globals)[TRACK_VARS_GET] &&
+               zend_u_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), 
Z_TYPE(progress->sname), Z_UNIVAL(progress->sname), 
Z_UNILEN(progress->sname)+1, (void **)&ppid) == SUCCESS
+       ) {
                zval_dtor(&progress->sid);
                ZVAL_ZVAL(&progress->sid, *ppid, 1, 0);
                convert_to_string(&progress->sid);
@@ -2218,7 +2200,7 @@
                        multipart_event_formdata *data = 
(multipart_event_formdata *) event_data;
                        size_t name_len, value_len;
                        zstr str;
-                       
+
                        /* orig callback may have modified *data->newlength */
                        if (data->newlength) {
                                value_len = *data->newlength;
@@ -2253,15 +2235,14 @@
                case MULTIPART_EVENT_FILE_START: {
                        multipart_event_file_start *data = 
(multipart_event_file_start *) event_data;
 
-                       /* Do nothing when $_POST[session.upload_progress.name] 
is not set 
+                       /* Do nothing when $_POST[session.upload_progress.name] 
is not set
                         * or when no session id was sent */
                        if (!Z_TYPE(progress->sid) || !Z_TYPE(progress->key)) {
                                break;
                        }
-                       
+
                        /* First FILE_START event, initializing */
                        if (!progress->data) {
-
                                php_rinit_session(0 TSRMLS_CC);
                                PS(id) = estrndup(Z_STRVAL(progress->sid), 
Z_STRLEN(progress->sid));
                                PS(apply_trans_sid) = progress->apply_trans_sid;
@@ -2307,7 +2288,7 @@
                        add_ascii_assoc_zval_ex(progress->current_file, 
"bytes_processed", sizeof("bytes_processed"), 
progress->current_file_bytes_processed);
 
                        add_next_index_zval(progress->files, 
progress->current_file);
-                       
+
                        Z_LVAL_P(progress->post_bytes_processed) = 
data->post_bytes_processed;
 
                        php_session_rfc1867_update(progress, 0 TSRMLS_CC);
@@ -2319,7 +2300,7 @@
                        if (!Z_TYPE(progress->sid) || !Z_TYPE(progress->key)) {
                                break;
                        }
-                       
+
                        Z_LVAL_P(progress->current_file_bytes_processed) = 
data->offset + data->length;
                        Z_LVAL_P(progress->post_bytes_processed) = 
data->post_bytes_processed;
 
@@ -2332,7 +2313,7 @@
                        if (!Z_TYPE(progress->sid) || !Z_TYPE(progress->key)) {
                                break;
                        }
-                       
+
                        if (data->temp_filename.v) {
                                add_ascii_assoc_text_ex(progress->current_file, 
"tmp_name",  sizeof("tmp_name"), data->temp_filename, 1);
                        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to