mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2: fix #78624: session_gc return value for user defined session handlers
This commit is contained in:
4
NEWS
4
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)
|
||||
|
||||
@@ -190,14 +190,15 @@ PS_GC_FUNC(user)
|
||||
|
||||
if (Z_TYPE(retval) == IS_LONG) {
|
||||
convert_to_long(&retval);
|
||||
return Z_LVAL(retval);
|
||||
*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
|
||||
}
|
||||
/* This is for older API compatibility */
|
||||
if (Z_TYPE(retval) == IS_TRUE) {
|
||||
return 1;
|
||||
}
|
||||
/* Anything else is some kind of error */
|
||||
return -1; // Error
|
||||
return *nrdels;
|
||||
}
|
||||
|
||||
PS_CREATE_SID_FUNC(user)
|
||||
|
||||
61
ext/session/tests/bug78624.phpt
Normal file
61
ext/session/tests/bug78624.phpt
Normal file
@@ -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
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user