php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #50261 Crash When Calling Parent Constructor with call_user_func()
Submitted: 2009-11-22 10:05 UTC Modified: 2010-02-08 16:52 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: tom at tomwardrop dot com Assigned: dmitry (profile)
Status: Closed Package: Reproducible crash
PHP Version: 5.3, 6 OS: *
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: tom at tomwardrop dot com
New email:
PHP Version: OS:

 

 [2009-11-22 10:05 UTC] tom at tomwardrop dot com
Description:
------------
If class B, extends Class A, and class B calls Class A's constructor in its own contructor by using call_user_func("parent", "__construct"), and if class A's constructor is defined as the class name rather than "__construct", then PHP seems to crash (which results in Apache 2 crashing). Problem still exists with all extensions disabled.

Reproduce code:
---------------
<?php

class testClass
{
	function testClass ()
	{
		echo 'Output string!';
	}
}


class testClass2 extends testClass
{
	function __construct ()
	{
		call_user_func(array('parent', '__construct'));
	}
}

new testClass2;

?>

Expected result:
----------------
The above code should echo out the string 'Output string!'. This code works correctly when "call_user_func" or "call_user_func_array" are not used.

Actual result:
--------------
call_user_func() and call_user_func_array(), cause PHP and as a result, Apache 2 to crash. When running PHP DBG debugger, the crash happens on the execution of call_user_func() line. The Windows event log notes that httpd.exe (apache) had crashed, blaming php5ts.dll for the fault.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-11-22 10:08 UTC] tom at tomwardrop dot com
To clarify, replacing...

call_user_func(array('parent', '__construct'));

...with...

parent::__construct();

...works as expected, hence it's definitely a problem with the "call_user_func" and "call_user_func_array" functions.
 [2009-11-22 18:37 UTC] jani@php.net
In PHP_5_2 you get this error and no crash:
Warning: call_user_func(parent::__construct): First argument is expected to be a valid callback..


 [2009-11-23 23:07 UTC] svn@php.net
Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=291248
Log: - Added test for bug #50261
 [2009-11-24 09:22 UTC] tony2001@php.net
Dmitry, could you take a look at it?
 [2009-11-30 11:39 UTC] svn@php.net
Automatic comment from SVN on behalf of dmitry
Revision: http://svn.php.net/viewvc/?view=revision&revision=291488
Log: Fixed bug #50261 (Crash When Calling Parent Constructor with call_user_func())
 [2009-11-30 11:40 UTC] dmitry@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2009-11-30 12:52 UTC] tom at tomwardrop dot com
Awesome turn around time. Well done guys, and thanks.
 [2010-02-08 16:52 UTC] dmitry@php.net
The patch for this bug had an accidental change which was reverted in next revision: http://svn.php.net/viewvc/?view=revision&revision=291491
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 12:01:29 2024 UTC