summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuo Ohgaki <yohgaki@php.net>2014-01-16 11:34:31 +0900
committerYasuo Ohgaki <yohgaki@php.net>2014-01-16 11:34:31 +0900
commit744f38c2d67f6376595b66eeae8c1f0ea5c5bd31 (patch)
tree53069ec329ba91f7caf3ccbaad43865ec06c05e0
parent7359dd6df3bd39a3aea3d27054ec639c687a24a3 (diff)
parent5662ffb295c6f9cb10768d8246f2656aae6b8abb (diff)
downloadphp-git-744f38c2d67f6376595b66eeae8c1f0ea5c5bd31.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4: Bug #66481 Segfaults on session_name()
-rw-r--r--ext/session/session.c7
-rw-r--r--ext/session/tests/bug66481.phpt16
2 files changed, 23 insertions, 0 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index c1bdf83633..571002ddcd 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -668,6 +668,13 @@ static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */
static PHP_INI_MH(OnUpdateName) /* {{{ */
{
+ /* Don't accept a blank session name from php.ini or -d session.name= */
+ if (!PG(modules_activated) && !new_value_length) {
+ /* Force the default value. */
+ new_value = "PHPSESSID";
+ new_value_length = 9;
+ }
+
/* 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))) {
diff --git a/ext/session/tests/bug66481.phpt b/ext/session/tests/bug66481.phpt
new file mode 100644
index 0000000000..0479b5ff4d
--- /dev/null
+++ b/ext/session/tests/bug66481.phpt
@@ -0,0 +1,16 @@
+--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--
+string(9) "PHPSESSID"
+string(3) "foo"
+