summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuo Ohgaki <yohgaki@php.net>2014-01-16 11:35:57 +0900
committerYasuo Ohgaki <yohgaki@php.net>2014-01-16 11:35:57 +0900
commit7b5b2b4efac508f7a9274d35f9b3d3e8188c928e (patch)
tree31292457ca2194dc092eb8c1e295eaa31ad901db
parent511a375e6035ac265a941b527f589bf1480e4f31 (diff)
parent518327f7e3198acc4419a32c67c6622b3067d134 (diff)
downloadphp-git-7b5b2b4efac508f7a9274d35f9b3d3e8188c928e.tar.gz
Merge branch 'PHP-5.6'
* PHP-5.6: 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 cffdabb7b7..8619c3fe62 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -689,6 +689,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"
+