]> granicus.if.org Git - php/commitdiff
Bug #66481 Segfaults on session_name()
authorConor McDermottroe <cmcdermottroe@engineyard.com>
Tue, 14 Jan 2014 02:08:13 +0000 (02:08 +0000)
committerYasuo Ohgaki <yohgaki@php.net>
Thu, 16 Jan 2014 02:33:10 +0000 (11:33 +0900)
If the previous value of session.name was NULL then any call to
session_name($string) would result in a segmentation fault.

This changes the behaviour to set the value of session.name to
"PHPSESSID" if a blank value is given in php.ini or via -d on the
command line. There is already protection against setting it to NULL via
session_name() or ini_set().

ext/session/session.c
ext/session/tests/bug66481.phpt [new file with mode: 0644]

index 35db50ae647c48d333aaf2342ed28244e7de04ce..5ea38475db3243dc8a4e6f3bbd1af9057dae9c39 100644 (file)
@@ -617,6 +617,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 (file)
index 0000000..0479b5f
--- /dev/null
@@ -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"
+