]> granicus.if.org Git - php/commitdiff
Fixed bug #35703: when session_name("123") consist only digits, should warning
authorYasuo Ohgaki <yohgaki@php.net>
Fri, 28 Jun 2013 23:07:44 +0000 (08:07 +0900)
committerYasuo Ohgaki <yohgaki@php.net>
Fri, 28 Jun 2013 23:07:44 +0000 (08:07 +0900)
ext/session/session.c
ext/session/tests/session_name_error.phpt
ext/session/tests/session_name_variation1.phpt

index a13094741953850584516e9c6d03bc9a25874fa0..3879edcce6514214c92dd3a0f100970a255415d0 100644 (file)
@@ -615,6 +615,31 @@ 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))) {
+               int err_type;
+
+               if (stage == ZEND_INI_STAGE_RUNTIME) {
+                       err_type = E_WARNING;
+               } else {
+                       err_type = E_ERROR;
+               }
+
+               /* Do not output error when restoring ini options. */
+               if (stage != ZEND_INI_STAGE_DEACTIVATE) {
+                       php_error_docref(NULL TSRMLS_CC, err_type, "session.name cannot be a numeric or empty '%s'", new_value);
+               }
+               return FAILURE;
+       }
+
+       OnUpdateStringUnempty(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+       return SUCCESS;
+}
+/* }}} */
+
 static PHP_INI_MH(OnUpdateHashFunc) /* {{{ */
 {
        long val;
@@ -706,7 +731,7 @@ static ZEND_INI_MH(OnUpdateSmartStr) /* {{{ */
  */
 PHP_INI_BEGIN()
        STD_PHP_INI_ENTRY("session.save_path",          "",          PHP_INI_ALL, OnUpdateSaveDir,save_path,          php_ps_globals,    ps_globals)
-       STD_PHP_INI_ENTRY("session.name",               "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name,       php_ps_globals,    ps_globals)
+       STD_PHP_INI_ENTRY("session.name",               "PHPSESSID", PHP_INI_ALL, OnUpdateName, session_name,       php_ps_globals,    ps_globals)
        PHP_INI_ENTRY("session.save_handler",           "files",     PHP_INI_ALL, OnUpdateSaveHandler)
        STD_PHP_INI_BOOLEAN("session.auto_start",       "0",         PHP_INI_ALL, OnUpdateBool,   auto_start,         php_ps_globals,    ps_globals)
        STD_PHP_INI_ENTRY("session.gc_probability",     "1",         PHP_INI_ALL, OnUpdateLong,   gc_probability,     php_ps_globals,    ps_globals)
index 2ed10d92a2bf677383647a8de9b9ba70e17c30b0..1b99d4ea3558ed505a0730c031c6986884a5fd34 100644 (file)
@@ -86,7 +86,7 @@ $inputs = array(
 $iterator = 1;
 foreach($inputs as $input) {
     echo "\n-- Iteration $iterator --\n";
-    var_dump(session_name($input));
+    var_dump($input, session_name($input));
     $iterator++;
 };
 
@@ -98,77 +98,139 @@ ob_end_flush();
 *** Testing session_name() : error functionality ***
 
 -- Iteration 1 --
+
+Warning: session_name(): session.name cannot be a numeric or empty '0' in %s on line %d
+int(0)
 string(9) "PHPSESSID"
 
 -- Iteration 2 --
-string(1) "0"
+
+Warning: session_name(): session.name cannot be a numeric or empty '1' in %s on line %d
+int(1)
+string(9) "PHPSESSID"
 
 -- Iteration 3 --
-string(1) "1"
+
+Warning: session_name(): session.name cannot be a numeric or empty '12345' in %s on line %d
+int(12345)
+string(9) "PHPSESSID"
 
 -- Iteration 4 --
-string(5) "12345"
+
+Warning: session_name(): session.name cannot be a numeric or empty '-2345' in %s on line %d
+int(-2345)
+string(9) "PHPSESSID"
 
 -- Iteration 5 --
-string(5) "-2345"
+
+Warning: session_name(): session.name cannot be a numeric or empty '10.5' in %s on line %d
+float(10.5)
+string(9) "PHPSESSID"
 
 -- Iteration 6 --
-string(4) "10.5"
+
+Warning: session_name(): session.name cannot be a numeric or empty '-10.5' in %s on line %d
+float(-10.5)
+string(9) "PHPSESSID"
 
 -- Iteration 7 --
-string(5) "-10.5"
+
+Warning: session_name(): session.name cannot be a numeric or empty '123456789000' in %s on line %d
+float(123456789000)
+string(9) "PHPSESSID"
 
 -- Iteration 8 --
-string(12) "123456789000"
+
+Warning: session_name(): session.name cannot be a numeric or empty '1.23456789E-9' in %s on line %d
+float(1.23456789E-9)
+string(9) "PHPSESSID"
 
 -- Iteration 9 --
-string(13) "1.23456789E-9"
+
+Warning: session_name(): session.name cannot be a numeric or empty '0.5' in %s on line %d
+float(0.5)
+string(9) "PHPSESSID"
 
 -- Iteration 10 --
-string(3) "0.5"
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+NULL
+string(9) "PHPSESSID"
 
 -- Iteration 11 --
-string(0) ""
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+NULL
+string(9) "PHPSESSID"
 
 -- Iteration 12 --
-string(0) ""
+
+Warning: session_name(): session.name cannot be a numeric or empty '1' in %s on line %d
+bool(true)
+string(9) "PHPSESSID"
 
 -- Iteration 13 --
-string(1) "1"
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+bool(false)
+string(9) "PHPSESSID"
 
 -- Iteration 14 --
-string(0) ""
+
+Warning: session_name(): session.name cannot be a numeric or empty '1' in %s on line %d
+bool(true)
+string(9) "PHPSESSID"
 
 -- Iteration 15 --
-string(1) "1"
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+bool(false)
+string(9) "PHPSESSID"
 
 -- Iteration 16 --
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
 string(0) ""
+string(9) "PHPSESSID"
 
 -- Iteration 17 --
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
 string(0) ""
+string(9) "PHPSESSID"
 
 -- Iteration 18 --
-string(0) ""
+string(7) "Nothing"
+string(9) "PHPSESSID"
 
 -- Iteration 19 --
 string(7) "Nothing"
+string(7) "Nothing"
 
 -- Iteration 20 --
+string(12) "Hello World!"
 string(7) "Nothing"
 
 -- Iteration 21 --
+object(classA)#1 (0) {
+}
 string(12) "Hello World!"
 
 -- Iteration 22 --
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+NULL
 string(12) "Hello World!"
 
 -- Iteration 23 --
-string(0) ""
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
+NULL
+string(12) "Hello World!"
 
 -- Iteration 24 --
 
 Warning: session_name() expects parameter 1 to be string, resource given in %s on line %d
+resource(5) of type (stream)
 NULL
-Done
-
+Done
\ No newline at end of file
index 16d6ad462c86af92fce985f9b40b212163703cc4..b0de3ee361a7dc51ddd302248873d883f0384d2d 100644 (file)
@@ -43,18 +43,20 @@ ob_end_flush();
 *** Testing session_name() : variation ***
 string(9) "PHPSESSID"
 bool(true)
-string(0) ""
+string(9) "PHPSESSID"
 bool(true)
-string(0) ""
-string(0) ""
+string(9) "PHPSESSID"
+string(9) "PHPSESSID"
 bool(true)
 string(1) "    "
 bool(true)
 string(1) "    "
+
+Warning: session_name(): session.name cannot be a numeric or empty '' in %s on line %d
 string(1) "    "
 bool(true)
-string(0) ""
+string(1) "    "
 bool(true)
-string(0) ""
+string(1) "    "
 Done