summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-01-16 14:41:12 +0800
committerXinchen Hui <laruence@php.net>2014-01-16 14:41:12 +0800
commitb777248ded69289b84d645ba2f36dbc207c77ff7 (patch)
tree7dfa2bee2bd943ba5af1b64e349c4fc4bffcae0a
parent271053ad470e4b7f0e1eb46dfc1a4369d5c7baa2 (diff)
downloadphp-git-b777248ded69289b84d645ba2f36dbc207c77ff7.tar.gz
Re-fixed Bug #66481 (Calls to session_name() segfault when session.name is null)
-rw-r--r--NEWS4
-rw-r--r--ext/session/session.c5
-rw-r--r--ext/session/tests/bug66481.phpt17
3 files changed, 23 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index cffe5ae7d0..81f88bf07f 100644
--- a/NEWS
+++ b/NEWS
@@ -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"