#25515 [Opn->Bgs]: HTTP_Session fails with strict error_handling

From: Date: Wed, 01 Sep 2004 14:30:33 +0000
Subject: #25515 [Opn->Bgs]: HTTP_Session fails with strict error_handling
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-33161@lists.php.net to get a copy of this message
ID: 25515 Updated by: alan_k@php.net Reported By: info at rhalff dot com -Status: Open +Status: Bogus Bug Type: PEAR related Operating System: linux PHP Version: Irrelevant New Comment: can you report this on pear.php.net if the problem still exists - where the package maintainers now manage pear bugs Previous Comments: ------------------------------------------------------------------------ [2003-09-12 10:12:56] info at rhalff dot com Description: ------------ When using a custom php error handler, HTTP_Session will fail because of an Undefined index in /usr/lib/php/HTTP/Session.php at line 545 A simple fix for this would be, to check if it is empty: /** * Sets new local name * * @static * @access public * @param string New local name * @return string Previous local name */ function localName($name = null) { if(!isset($GLOBALS['__HTTP_Session_Localname'])) { $GLOBALS['__HTTP_Session_Localname'] = null; } $return = $GLOBALS['__HTTP_Session_Localname']; if (isset($name)) { $GLOBALS['__HTTP_Session_Localname'] = $name; } return $return; } After this fix is applied HTTP_Session:start will be succesfull, but HTTP_Session::setLocal will fail with an undefined index too. A fix for this method would be: function setLocal($name, $value) { $local = md5(HTTP_Session::localName()); if (!isset($_SESSION[$local])) { $_SESSION[$local] = array(); } if (!isset($_SESSION[$local][$name])) { $_SESSION[$local][$name] = null; } $return = $_SESSION[$local][$name]; if (null === $value) { unset($_SESSION[$local][$name]); } else { $_SESSION[$local][$name] = $value; } return $return; } As with the last method HTTP:Session:set: function set($name, $value) { if(!isset($_SESSION[$name])) { $_SESSION[$name] = null; } $return = $_SESSION[$name]; if (null === $value) { unset($_SESSION[$name]); } else { $_SESSION[$name] = $value; } return $return; } Reproduce code: --------------- require_once ("PEAR.php"); require_once ("HTTP/Session.php"); function php_error_handler($errno, $errstr, $errfile, $errline) { echo "$errstr in $errfile at line $errline"; exit(); } set_error_handler('php_error_handler'); HTTP_Session::start('SessionID', uniqid('MyID')); HTTP_Session::setLocal('name','value'); HTTP_Session::setLocal('name2','value'); echo "finished"; Expected result: ---------------- finished Actual result: -------------- Undefined index in /usr/lib/php/HTTP/Session.php at linenr ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=25515&edit=1

« previous php.pear.dev (#33161) next »