php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25515 HTTP_Session fails with strict error_handling
Submitted: 2003-09-12 10:12 UTC Modified: 2004-09-01 16:30 UTC
From: info at rhalff dot com Assigned:
Status: Not a bug Package: PEAR related
PHP Version: Irrelevant OS: linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: info at rhalff dot com
New email:
PHP Version: OS:

 

 [2003-09-12 10:12 UTC] 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

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-09-01 16:30 UTC] alan_k@php.net
can you report this on pear.php.net if the problem still exists - where the package maintainers now manage pear bugs
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 18:01:29 2024 UTC