PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » HTTP » HTTP_Session » Bug #8815

Notices with error_reporting(E_ALL)

Details

Submitted2006-09-29 17:39 UTC
Fromfrederes at free dot fr
Assignedtroehr
StatusClosed
PackageHTTP_Session
PHP Version4.4.4
OSwindows P
Roadmaps(Not assigned)

Comments

[2006-09-29 17:39 UTC] frederes at free dot fr

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_Local
name'])) {
$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;
}

Test script:
---------------
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