====== 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