====== PHP RFC: Fix handling of custom session handler return values ======
* Version: 1.0
* Date: 2014-05-15
* Author: Sara Golemon, pollita@php.net
* Status: Implemented (PHP 7.0)
* First Published at: http://wiki.php.net/rfc/session.user.return-value
===== Introduction =====
The logic in ext/session/mod_user.c is just plain wrong.
http://us2.php.net/session_set_save_handler
* "[For all callback functions] Return value is TRUE for success, FALSE for failure."
Yet in ext/session/mod_user.c:
PS_FUNC(user) {
/* blah blah */
zval *retval = ps_call_handler(PSF(func), argc, argc);
if (retval) {
convert_to_long(retval);
return Z_LVAL_P(retval);
}
return FAILURE;
}
Remembering that SUCCESS == 0, and FAILURE == -1
So what does that mean for return values?
* return false => return (int)false => return 0 => return SUCCESS
* return true => return (int)true) => return 1 => return NeitherSUCCESSnorFAILURE
===== Proposal =====
Change the FINISH macro in session.c to map true to SUCCESS, false to FAILURE, warn (and fail) for integer -1, and warn (but succeed) for anything else.
===== Backward Incompatible Changes =====
* Anyone currently returning -1 for failure (because that's what ends up working as expected) now gets a warning.
* Anyone returning false for failure now actually goes down the failure path (and this might be unexpected due to how long this has been wrong).
===== Proposed PHP Version(s) =====
Either 5.next (5.7?) or phpng due to the age of this bug.
===== Vote =====
* Yes
* No
* 5.6 or later
* 5.7 or later
* 6.0 or later
Voting Opened Jun 10, 2014
Voting Closes Jun 24, 2014
===== Implementation =====
* https://github.com/sgolemon/php-src/compare/session.user.return-value?expand=1