ID:               23039
 Updated by:       [EMAIL PROTECTED]
 Reported By:      a dot eibach at gmx dot net
-Status:           Open
+Status:           Wont fix
 Bug Type:         Reproducible crash
 Operating System: Win98 SE
 PHP Version:      4.3.1
 New Comment:

It's not so crazy. You've just got some endless recursion 
there, which is why it doesn't happen when you uncomment 
the contact constructor. When the contact object is 
instantiated, the employer constructor is called in the 
absence of a contact constructor. Since a new contact 
object is instanitated in the employer constructor, you 
get recursion, as the employer constructor is effectively 
calling itself. You'll eventually run out of memory or 
something similarly strange will happen, hence the 
segfault. You'll get the same results if you do "function 
foo() { return foo(); } foo();" 
 
I don't imagine this will be fixed. It's not PHP's fault 
is somebody codes an endless recursion loop. 
 
J 


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

[2003-04-03 13:33:44] a dot eibach at gmx dot net

Hi.
What is illegal code? Code with the intention to break something. But
sometimes it's even a bad mistake causing this (inheriting a wrong
class or deriving from an illegal class or...)
The following stuff is really ILLEGAL code. YOU SHOULD NEVER PROGRAM
LIKE THIS. ;) But Apache shouldn't GPF, too. The Apache people warped
me over here because they said that this is no Apache issue. May they
be right.

As you can see...
The code is *very* narrowed down. It's definitely not _that_ simple
IRL.
Main class is 'db_entry'. Class 'contact' is derived from employer,
which is derived itself from db_entry.
Now we get ILLEGAL. We create a new 'contact' member object by directly
(!!!) instantiating contact from the db_entry constructor. (Of course,
we should instantiate 'employer', because contact is created inside
too. But we want the crash, don't we :))
Crazy thing is that PHP doesn't complain about anything if this is done
with *existing* 'contact()' constructor.
If this is missing or disabled ('//' part), Apache crashes.

OS: Win98 SE
Apache: 1.3.27
PHP: 4.3.1 (stable)


--script--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 FINAL//EN">
<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#990000" VLINK="#003366" TEXT="#000000" 
TOPMARGIN=16 LEFTMARGIN=10 MARGINWIDTH=10 MARGINHEIGHT=16>
<font face="Arial">

<?php
class employer extends db_entry
{
  var $contactman;

   function employer()  /* constructor */
   {
    $this->contactman = new contact();
   }
}
class contact extends employer
{
 // function contact()   // this is the constructor and it's
MISSING!!!
 // {                // --> crash
 // }
}

class db_entry
{

    var $ct_entry;

    function db_entry()
    {
     /* generate indirect member object by illegally 
     instantiating an object TWO hierarchy steps below!!! */
      $this->ct_entry  = new contact();
      // -> crash!
    }
}

  $newentr = new db_entry();
 echo "OK";
?>
</font>
</BODY>
</HTML>


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


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

Reply via email to