php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #67436 Autoloader isn't called if two method definitions don't match
Submitted: 2014-06-13 10:13 UTC Modified: 2014-06-15 20:30 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: wolkerstorfer at xortex dot at Assigned: bwoebi (profile)
Status: Closed Package: Unknown/Other Function
PHP Version: 5.5.13 OS: Debian Wheezy
Private report: No CVE-ID: None
 [2014-06-13 10:13 UTC] wolkerstorfer at xortex dot at
Description:
------------
If a user definded error handler is present the autoloader registered with spl_register_autoloader isn`t called in certain cases. This bug was not present in PHP 5.3 but can be reproduced in all Versions of 5.4 and 5.5

Test script:
---------------
https://docs.google.com/file/d/0ByiEkxk4BDg0cUE2ZzRuaXNRSjA/edit

Expected result:
----------------
To reproduce the bug please extract the ZIP file from the provided URL and run test.php. The autoloader is expected to require the other files (a.php, b.php, c.php) as needed.

Actual result:
--------------
"Fatal error: Class 'c' not found" occurs. If the custom error handler is removed the autoloader works as expected.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-06-15 16:37 UTC] [email protected]
-Status: Open +Status: Verified
 [2014-06-15 16:37 UTC] [email protected]
Verified that this is a problem in PHP 5.4.24 on Mac OS X 10.9.3.
 [2014-06-15 18:16 UTC] [email protected]
A quick investigation shows that the body of this if branch is taken when looking up 'c': http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_execute_API.c#949

949    /* The compiler is not-reentrant. Make sure we __autoload() only during run-time
950     * (doesn't impact functionality of __autoload()
951    */
952    if (!use_autoload || zend_is_compiling(TSRMLS_C)) {
953        if (!key) {
954            free_alloca(lc_free, use_heap);
955        }
956        return FAILURE;
957    }

use_autoload is set to 1, so it must be the zend_is_compiling call.
 [2014-06-15 20:19 UTC] [email protected]
-Status: Verified +Status: Closed
 [2014-06-15 20:30 UTC] [email protected]
-Summary: Autoloader isn`t called if user defined error handler is present +Summary: Autoloader isn't called if two method definitions don't match -Assigned To: +Assigned To: bwoebi
 [2014-06-15 20:30 UTC] [email protected]
The fix for this bug has been committed.

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/.

 For Windows:

http://windows.php.net/snapshots/
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Jun 11 11:01:26 2025 UTC