]> granicus.if.org Git - php/commitdiff
Fixed #67694: Regression in session_regenerate_id()
authorTjerk Meesters <datibbaw@php.net>
Sat, 23 Aug 2014 01:18:02 +0000 (09:18 +0800)
committerTjerk Meesters <datibbaw@php.net>
Sat, 23 Aug 2014 01:18:02 +0000 (09:18 +0800)
NEWS
ext/session/session.c
ext/session/tests/bug67694.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 70780ce068198629d4ee3b9ee0d9b2be854b13a0..ad21933b7d972482e5b00dbc9d2668dbf561934d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,9 @@ PHP                                                                        NEWS
 - Zlib:
   . Fixed bug #67865 (internal corruption phar error). Mike
 
+- Session:
+  . Fixed bug #67694 (Regression in session_regenerate_id()). (Tjerk)
+
 14 Aug 2014, PHP 5.6.0 Release Candidate 4
 
 - COM:
index d1a7a073a5814deeceb61e25b6b56ae4d3d86892..d440e6fdd90218fb3ecec4403ba137dda5794a18 100644 (file)
@@ -1994,7 +1994,7 @@ static PHP_FUNCTION(session_regenerate_id)
                                RETURN_FALSE;
                        }
                        efree(PS(id));
-                       PS(id) = NULL;
+                       memset(PS(session_data_hash),'\0', 16);
                }
 
                PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC);
diff --git a/ext/session/tests/bug67694.phpt b/ext/session/tests/bug67694.phpt
new file mode 100644 (file)
index 0000000..08a2969
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+Bug #67694     Regression in session_regenerate_id()
+--INI--
+session.save_handler = files
+session.name=PHPSESSID
+session.auto_start = 0
+session.use_cookies = 0
+session.cache_limiter =
+date.timezone = UTC
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+
+$data = date('r');
+
+session_start();
+$id = session_id();
+$_SESSION['init'] = $data;
+
+session_write_close();
+
+session_id($id);
+session_start();
+
+session_regenerate_id(false);
+
+$newid = session_id();
+var_dump($newid != $id);
+
+session_write_close();
+
+unset($_SESSION);
+
+session_id($newid);
+session_start();
+
+var_dump(isset($_SESSION['init']) && $data == $_SESSION['init']);
+--EXPECT--
+bool(true)
+bool(true)