PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

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