mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Merge branch 'PHP-8.3'
* PHP-8.3: Temporary reset filename and lineno override before autoload
This commit is contained in:
commit
8a7d79da90
33
Zend/tests/gh10232.phpt
Normal file
33
Zend/tests/gh10232.phpt
Normal file
@ -0,0 +1,33 @@
|
||||
--TEST--
|
||||
GH-10232 (Weird behaviour when a file is autoloaded in assignment of a constant)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
set_include_path('gh10232-nonexistent') or exit(1);
|
||||
chdir(__DIR__) or exit(1);
|
||||
|
||||
spl_autoload_register(function () {
|
||||
trigger_error(__LINE__);
|
||||
$ex = new Exception();
|
||||
echo 'Exception on line ', $ex->getLine(), "\n";
|
||||
require_once __DIR__ . '/gh10232/constant_def.inc';
|
||||
}, true);
|
||||
|
||||
|
||||
class ConstantRef
|
||||
{
|
||||
public const VALUE = ConstantDef::VALUE;
|
||||
}
|
||||
|
||||
ConstantRef::VALUE;
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: 7 in %sgh10232.php on line 7
|
||||
Exception on line 8
|
||||
|
||||
Notice: constant_def.inc in %sconstant_def.inc on line 3
|
||||
Exception in constant_def.inc on line 4
|
||||
|
||||
Notice: required.inc in %srequired.inc on line 3
|
||||
Exception in required.inc on line 4
|
12
Zend/tests/gh10232/constant_def.inc
Normal file
12
Zend/tests/gh10232/constant_def.inc
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
trigger_error(basename(__FILE__));
|
||||
$ex = new Exception();
|
||||
echo 'Exception in ', basename($ex->getFile()), ' on line ', $ex->getLine(), "\n";
|
||||
|
||||
require_once 'required.inc'; // The script of the same directory.
|
||||
|
||||
class ConstantDef
|
||||
{
|
||||
const VALUE = true;
|
||||
}
|
5
Zend/tests/gh10232/required.inc
Normal file
5
Zend/tests/gh10232/required.inc
Normal file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
trigger_error(basename(__FILE__));
|
||||
$ex = new Exception();
|
||||
echo 'Exception in ', basename($ex->getFile()), ' on line ', $ex->getLine(), "\n";
|
@ -12,5 +12,5 @@ spl_autoload_register(function($class) use ($classlist) {
|
||||
var_dump(D::HW);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Constant expression contains invalid operations in %sgh7771_3.php(7) : eval()'d code(1) : eval()'d code on line 1
|
||||
Fatal error: Constant expression contains invalid operations in %sgh7771_3.php(7) : eval()'d code on line 1
|
||||
|
||||
|
@ -1227,9 +1227,15 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, zend_string *
|
||||
autoload_name = zend_string_copy(name);
|
||||
}
|
||||
|
||||
zend_string *previous_filename = EG(filename_override);
|
||||
zend_long previous_lineno = EG(lineno_override);
|
||||
EG(filename_override) = NULL;
|
||||
EG(lineno_override) = -1;
|
||||
zend_exception_save();
|
||||
ce = zend_autoload(autoload_name, lc_name);
|
||||
zend_exception_restore();
|
||||
EG(filename_override) = previous_filename;
|
||||
EG(lineno_override) = previous_lineno;
|
||||
|
||||
zend_string_release_ex(autoload_name, 0);
|
||||
zend_hash_del(EG(in_autoload), lc_name);
|
||||
|
Loading…
Reference in New Issue
Block a user