-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bail on exception during delayed autoload
We shouldn't try to load further classes if one autoload throws. This fixes oss-fuzz #38881, though I believe there are still two deeper issues here: 1) Why do we allow autoloading with an active exception? 2) Exception save & restore should probably also save and restore the exception opline.
- Loading branch information
Showing
2 changed files
with
34 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--TEST-- | ||
Exception during delayed variance autoload | ||
--FILE-- | ||
<?php | ||
spl_autoload_register(function($class) { | ||
echo "$class\n"; | ||
if ($class == 'X') { | ||
new Y; | ||
} | ||
if ($class == 'Y') { | ||
new Q; | ||
} | ||
}); | ||
class A { | ||
function method(): X {} | ||
} | ||
class B extends A { | ||
function method(): Y {} | ||
} | ||
?> | ||
--EXPECTF-- | ||
Y | ||
Q | ||
|
||
Warning: Uncaught Error: Class "Q" not found in %s:%d | ||
Stack trace: | ||
#0 %s(%d): {closure}('Y') | ||
#1 {main} | ||
thrown in %s on line %d | ||
|
||
Fatal error: Could not check compatibility between B::method(): Y and A::method(): X, because class Y is not available in %s on line %d |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters