diff options
author | Xinchen Hui <laruence@php.net> | 2014-01-16 14:41:12 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-01-16 14:41:12 +0800 |
commit | b777248ded69289b84d645ba2f36dbc207c77ff7 (patch) | |
tree | 7dfa2bee2bd943ba5af1b64e349c4fc4bffcae0a | |
parent | 271053ad470e4b7f0e1eb46dfc1a4369d5c7baa2 (diff) | |
download | php-git-b777248ded69289b84d645ba2f36dbc207c77ff7.tar.gz |
Re-fixed Bug #66481 (Calls to session_name() segfault when session.name is null)
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/session/session.c | 5 | ||||
-rw-r--r-- | ext/session/tests/bug66481.phpt | 17 |
3 files changed, 23 insertions, 3 deletions
@@ -5,6 +5,10 @@ PHP NEWS - Core: . Fixed bug #66286 (Incorrect object comparison with inheritance). (Nikita) +- Session: + . Fixed bug #66481 (Calls to session_name() segfault when session.name is + null). (Laruence) + ?? ??? 2013, PHP 5.4.24 - Core: diff --git a/ext/session/session.c b/ext/session/session.c index 35db50ae64..5b03d6362e 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -618,11 +618,10 @@ static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */ static PHP_INI_MH(OnUpdateName) /* {{{ */ { /* Numeric session.name won't work at all */ - if (PG(modules_activated) && - (!new_value_length || is_numeric_string(new_value, new_value_length, NULL, NULL, 0))) { + if ((!new_value_length || is_numeric_string(new_value, new_value_length, NULL, NULL, 0))) { int err_type; - if (stage == ZEND_INI_STAGE_RUNTIME) { + if (stage == ZEND_INI_STAGE_RUNTIME || stage == ZEND_INI_STAGE_ACTIVATE || stage == ZEND_INI_STAGE_STARTUP) { err_type = E_WARNING; } else { err_type = E_ERROR; diff --git a/ext/session/tests/bug66481.phpt b/ext/session/tests/bug66481.phpt new file mode 100644 index 0000000000..cf6ad6a8d6 --- /dev/null +++ b/ext/session/tests/bug66481.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #66481: Calls to session_name() segfault when session.name is null. +--INI-- +session.name= +--SKIPIF-- +<?php include('skipif.inc'); ?> +--FILE-- +<?php + +var_dump(session_name("foo")); +var_dump(session_name("bar")); +--EXPECTF-- +PHP Warning: PHP Startup: session.name cannot be a numeric or empty '' in Unknown on line 0 + +Warning: PHP Startup: session.name cannot be a numeric or empty '' in Unknown on line 0 +string(9) "PHPSESSID" +string(3) "foo" |