diff options
| author | Yasuo Ohgaki <yohgaki@php.net> | 2014-07-19 09:59:51 +0900 | 
|---|---|---|
| committer | Yasuo Ohgaki <yohgaki@php.net> | 2014-07-19 09:59:51 +0900 | 
| commit | d0d5a1c444e1cf87dc947d733619a0238c8a0c34 (patch) | |
| tree | 410efbca96ab14b21ee652623f5ef444c4d173f2 | |
| parent | 47e640164affa17820f8db3c620cd6fccfa317b3 (diff) | |
| parent | f83a6c33b407603c346dc3b20ac031e7594d37e8 (diff) | |
| download | php-git-d0d5a1c444e1cf87dc947d733619a0238c8a0c34.tar.gz | |
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
  Fixed bug #66827 Session raises E_NOTICE when session name variable is array
| -rw-r--r-- | ext/session/session.c | 22 | ||||
| -rw-r--r-- | ext/session/tests/bug66827.phpt | 12 | 
2 files changed, 25 insertions, 9 deletions
| diff --git a/ext/session/session.c b/ext/session/session.c index 1d60c40188..6412043673 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1444,9 +1444,16 @@ PHPAPI const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC) /* {{{  }  /* }}} */ -#define PPID2SID \ -		convert_to_string((*ppid)); \ -		PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid)) +static void ppid2sid(zval **ppid TSRMLS_DC) { +	if (Z_TYPE_PP(ppid) != IS_STRING) { +		PS(id) = NULL; +		PS(send_cookie) = 1; +	} else { +		convert_to_string((*ppid)); +		PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid)); +		PS(send_cookie) = 0; +	} +}  PHPAPI void php_session_reset_id(TSRMLS_D) /* {{{ */  { @@ -1540,9 +1547,8 @@ PHPAPI void php_session_start(TSRMLS_D) /* {{{ */  				Z_TYPE_PP(data) == IS_ARRAY &&  				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS  		) { -			PPID2SID; +			ppid2sid(ppid TSRMLS_CC);  			PS(apply_trans_sid) = 0; -			PS(send_cookie) = 0;  			PS(define_sid) = 0;  		} @@ -1551,8 +1557,7 @@ PHPAPI void php_session_start(TSRMLS_D) /* {{{ */  				Z_TYPE_PP(data) == IS_ARRAY &&  				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS  		) { -			PPID2SID; -			PS(send_cookie) = 0; +			ppid2sid(ppid TSRMLS_CC);  		}  		if (!PS(use_only_cookies) && !PS(id) && @@ -1560,8 +1565,7 @@ PHPAPI void php_session_start(TSRMLS_D) /* {{{ */  				Z_TYPE_PP(data) == IS_ARRAY &&  				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS  		) { -			PPID2SID; -			PS(send_cookie) = 0; +			ppid2sid(ppid TSRMLS_CC);  		}  	} diff --git a/ext/session/tests/bug66827.phpt b/ext/session/tests/bug66827.phpt new file mode 100644 index 0000000000..4e1a4f7aea --- /dev/null +++ b/ext/session/tests/bug66827.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #66827: Session raises E_NOTICE when session name variable is array. +--INI-- +--SKIPIF-- +<?php include('skipif.inc'); ?> +--FILE-- +<?php +$_COOKIE[session_name()] = array(); +session_start(); +echo 'OK'; +--EXPECTF-- +OK | 
