mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Merge branch 'PHP-8.3'
* PHP-8.3: Fix GH-13433: Segmentation Fault in zend_class_init_statics when using opcache.preload
This commit is contained in:
commit
6316eb1b2c
4
ext/opcache/tests/gh13433/ParentClass.inc
Normal file
4
ext/opcache/tests/gh13433/ParentClass.inc
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
abstract class ParentClass {
|
||||
use TraitA;
|
||||
}
|
8
ext/opcache/tests/gh13433/TheClass.inc
Normal file
8
ext/opcache/tests/gh13433/TheClass.inc
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
class TheClass extends ParentClass {
|
||||
use TraitA;
|
||||
|
||||
public function test() {
|
||||
return self::$non_empty_array;
|
||||
}
|
||||
}
|
4
ext/opcache/tests/gh13433/TraitA.inc
Normal file
4
ext/opcache/tests/gh13433/TraitA.inc
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
trait TraitA {
|
||||
protected static $non_empty_array = ['non-empty'];
|
||||
}
|
28
ext/opcache/tests/gh13433/gh13433.phpt
Normal file
28
ext/opcache/tests/gh13433/gh13433.phpt
Normal file
@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
GH-13433 (Segmentation Fault in zend_class_init_statics when using opcache.preload)
|
||||
--INI--
|
||||
opcache.enable=1
|
||||
opcache.enable_cli=1
|
||||
opcache.optimization_level=0
|
||||
opcache.preload={PWD}/preload.inc
|
||||
--EXTENSIONS--
|
||||
opcache
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$instance = new TheClass;
|
||||
var_dump($instance);
|
||||
var_dump($instance->test());
|
||||
?>
|
||||
OK
|
||||
--EXPECT--
|
||||
object(TheClass)#1 (0) {
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
string(9) "non-empty"
|
||||
}
|
||||
OK
|
4
ext/opcache/tests/gh13433/preload.inc
Normal file
4
ext/opcache/tests/gh13433/preload.inc
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
require __DIR__.'/TraitA.inc';
|
||||
require __DIR__.'/ParentClass.inc';
|
||||
require __DIR__.'/TheClass.inc';
|
@ -904,10 +904,11 @@ zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce)
|
||||
ce->default_static_members_table = zend_shared_memdup_free(ce->default_static_members_table, sizeof(zval) * ce->default_static_members_count);
|
||||
|
||||
/* Persist only static properties in this class.
|
||||
* Static properties from parent classes will be handled in class_copy_ctor */
|
||||
i = (ce->parent && (ce->ce_flags & ZEND_ACC_LINKED)) ? ce->parent->default_static_members_count : 0;
|
||||
for (; i < ce->default_static_members_count; i++) {
|
||||
zend_persist_zval(&ce->default_static_members_table[i]);
|
||||
* Static properties from parent classes will be handled in class_copy_ctor and are marked with IS_INDIRECT */
|
||||
for (i = 0; i < ce->default_static_members_count; i++) {
|
||||
if (Z_TYPE(ce->default_static_members_table[i]) != IS_INDIRECT) {
|
||||
zend_persist_zval(&ce->default_static_members_table[i]);
|
||||
}
|
||||
}
|
||||
if (ce->ce_flags & ZEND_ACC_IMMUTABLE) {
|
||||
if (ce->ce_flags & ZEND_ACC_LINKED) {
|
||||
|
Loading…
Reference in New Issue
Block a user