summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2019-10-04 06:12:15 +0200
committerJoe Watkins <krakjoe@php.net>2019-10-04 06:12:29 +0200
commitf45eb353d1fe1bf74c92bec88b7e1e1ea3604345 (patch)
tree88eeb9cbb70fbea985e06315866f2bd229060cf6
parentf4d078b1c7b34debccaaac85f066e2781dc9e919 (diff)
parenta6d219630c4128a124f3d9a2e7ca97afb92d5d47 (diff)
downloadphp-git-f45eb353d1fe1bf74c92bec88b7e1e1ea3604345.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2: fix #78624: session_gc return value for user defined session handlers
-rw-r--r--NEWS4
-rw-r--r--ext/session/mod_user.c15
-rw-r--r--ext/session/tests/bug78624.phpt61
-rw-r--r--ext/session/tests/session_set_save_handler_basic.phpt12
4 files changed, 85 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 58a236345b..dd1ffa2caa 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,10 @@ PHP NEWS
. Fixed bug #78272 (calling preg_match() before pcntl_fork() will freeze
child process). (Nikita)
+- Session:
+ . Fixed bug #78624 (session_gc return value for user defined session
+ handlers). (bshaffer)
+
- Standard:
. Fixed bug #76342 (file_get_contents waits twice specified timeout).
(Thomas Calvet)
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
index 9f45eff3f9..86c4bb0e30 100644
--- a/ext/session/mod_user.c
+++ b/ext/session/mod_user.c
@@ -190,14 +190,15 @@ PS_GC_FUNC(user)
if (Z_TYPE(retval) == IS_LONG) {
convert_to_long(&retval);
- return Z_LVAL(retval);
- }
- /* This is for older API compatibility */
- if (Z_TYPE(retval) == IS_TRUE) {
- return 1;
+ *nrdels = Z_LVAL(retval);
+ } else if (Z_TYPE(retval) == IS_TRUE) {
+ /* This is for older API compatibility */
+ *nrdels = 1;
+ } else {
+ /* Anything else is some kind of error */
+ *nrdels = -1; // Error
}
- /* Anything else is some kind of error */
- return -1; // Error
+ return *nrdels;
}
PS_CREATE_SID_FUNC(user)
diff --git a/ext/session/tests/bug78624.phpt b/ext/session/tests/bug78624.phpt
new file mode 100644
index 0000000000..9055b5af7b
--- /dev/null
+++ b/ext/session/tests/bug78624.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test session_set_save_handler() : session_gc() returns the number of deleted records.
+--INI--
+session.name=PHPSESSID
+session.save_handler=files
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : bool session_set_save_handler(SessionHandler $handler [, bool $register_shutdown_function = true])
+ * Description : Sets user-level session storage functions
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Test session_set_save_handler() : session_gc() returns the number of deleted records. ***\n";
+
+class MySession implements SessionHandlerInterface {
+ public function open($path, $name) {
+ echo 'Open', "\n";
+ return true;
+ }
+ public function read($key) {
+ echo 'Read ', session_id(), "\n";
+ return '';
+ }
+ public function write($key, $data) {
+ echo 'Write ', session_id(), "\n";
+ return true;
+ }
+ public function close() {
+ echo 'Close ', session_id(), "\n";
+ return true;
+ }
+ public function destroy($key) {
+ echo 'Destroy ', session_id(), "\n";
+ return true;
+ }
+ public function gc($ts) {
+ echo 'Garbage collect', "\n";
+ return 1;
+ }
+}
+
+$handler = new MySession;
+session_set_save_handler($handler);
+session_start();
+var_dump(session_gc());
+session_write_close();
+
+--EXPECTF--
+*** Test session_set_save_handler() : session_gc() returns the number of deleted records. ***
+Open
+Read %s
+Garbage collect
+int(1)
+Write %s
+Close %s
diff --git a/ext/session/tests/session_set_save_handler_basic.phpt b/ext/session/tests/session_set_save_handler_basic.phpt
index bf77e77a6e..bdfd928c9a 100644
--- a/ext/session/tests/session_set_save_handler_basic.phpt
+++ b/ext/session/tests/session_set_save_handler_basic.phpt
@@ -49,6 +49,12 @@ var_dump($_SESSION);
$_SESSION['Bar'] = 'Foo';
session_write_close();
+echo "Garbage collection..\n";
+session_id($session_id);
+session_start();
+var_dump(session_gc());
+session_write_close();
+
echo "Cleanup..\n";
session_id($session_id);
session_start();
@@ -101,6 +107,12 @@ array(3) {
}
Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;Bar|s:3:"Foo";]
Close [%s,PHPSESSID]
+Garbage collection..
+Open [%s,PHPSESSID]
+Read [%s,%s]
+int(0)
+Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;Bar|s:3:"Foo";]
+Close [%s,PHPSESSID]
Cleanup..
Open [%s,PHPSESSID]
Read [%s,%s]