ID:               22510
 Updated by:       [EMAIL PROTECTED]
 Reported By:      php at codewhore dot org
-Status:           Open
+Status:           Verified
 Bug Type:         Scripting Engine problem
 Operating System: Linux 2.4
-PHP Version:      4CVS-2003-03-02 (stable)
+PHP Version:      4CVS-2003-03-04 (stable)


Previous Comments:
------------------------------------------------------------------------

[2003-03-04 08:21:37] php at codewhore dot org

Here's another far more compact version:

<?php

  class module
  {
    var $list;

    function finalize()
    {
      $cl =& $this->list;
    }

    function method(&$controller)
    {
      $controller->get();
    }
  }

  class controller
  {
    function &get()
    {
      return @$this->foo;
    }

    function call()
    {
      call_user_func_array($this->sym, array(&$this));
    }

    function load()
    {
      $instance =& new module();
      $this->instance =& $instance;
      $this->sym = array(&$instance, 'method');
    }

    function run()
    {
      $this->load();
      $this->call();
      $this->call();
    }
  }

  class application
  {
    function run(&$controller)
    {
      $removing_this_global_usage_prevents_segv = @$_GET['x'];
      $controller->run();
    }
  }

  $controller = new controller();
  application::run($controller);
  $controller->instance->finalize();

?>

------------------------------------------------------------------------

[2003-03-03 15:35:00] php at codewhore dot org

Hi:

Thanks for waiting. Below is a test case which I've used to
reproducibly crash 4.3.0 and 4.3.2-dev on three seperate machines.
Sorry it's so long, but this is the absolute minimum I was able to come
up with. I haven't captured another backtrace for this particular case
yet, but I'd be happy to do so if you'd like.

---- >8 --- cut here --- 8< ----

<?php

  class module
  {
    function module(&$controller)
    {
      $this->controller =& $controller;
    }
  }

  class runnable_module extends module
  {
    function initialize() { }
    function finalize()   { }
    function method()     { }
  }


  class first extends runnable_module
  {
    function method()
    {
      $data =& $this->controller->get($data);
    }
  }


  class second extends runnable_module
  {
    function initialize()
    {
      $this->list = array();
    }

    function finalize()
    {
      echo "About to get SIGSEGV...\n";
      $cl =& $this->list;
      echo "Shouldn't see this\n";
    }
  }


  class controller
  {
    function finalize()
    {
      foreach ($this->module_list as $k => $x)
        $this->module_list[$k]->finalize();
    }

    function &get($name)
    {
      return @$this->vars[$name];
    }

    function call($function)
    {
      $symbol =& $this->symtab[$function][0];
      call_user_func($symbol, array());
    }

    function load($name, $method)
    {
      $instance =& new $name($this);
      $instance->initialize();
      $this->module_list[$name] =& $instance;
      $this->symtab[$name] = array(array(&$instance, $method));
    }

    function run()
    {
      $this->load('first', 'method');
      $this->load('second', 'method');
      $this->call('first');
      $this->call('first');
    }
  }


  class application
  {
    function application(&$controller)
    {
      $this->controller =& $controller;
    }

    function run()
    {
      $controller =& $this->controller;
      $removing_this_global_usage_prevents_segv = $_GET['x'];
      $controller->run();
    }
  }


  $controller = new controller();
  $app = new application($controller);
  $app->run();
  $controller->finalize();

?>

---- >8 --- cut here --- 8< ----

Thanks again,
- Dave

------------------------------------------------------------------------

[2003-03-03 11:36:18] [EMAIL PROTECTED]

keep at feedback status until the asked feedback is actually given..


------------------------------------------------------------------------

[2003-03-03 07:47:15] php at codewhore dot org

I'm working on it - there's a ton of code here, and it's proving
difficult to pare it down to a simple test case. However, I hope to
have one posted by the end of the day today.

Thanks.

------------------------------------------------------------------------

[2003-03-03 00:59:43] [EMAIL PROTECTED]

Please provide us a minimum and self-contained script for reproducing
the problem.

I cannot reproduce this with the following code;

<?php
class foo
{
  function transaction_commit() {
    return true;
  }
}
class test
{
  var $commit_list;
  function test() {
    $a = array('a'=>new foo(), 'b'=>new foo());
    $this->commit_list = &$a;
  }
  function finalize() {
    $cl =& $this->commit_list;

    foreach ($cl as $k => $x)
    {
      if (!$cl[$k]->transaction_commit())
        return $this->throw(E_SYS);
    }

    return true;
  }
}

$a = new test();
$a->finalize();
?>


------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/22510

-- 
Edit this bug report at http://bugs.php.net/?id=22510&edit=1

Reply via email to