Skip to content

Commit 8d3429c

Browse files
committed
Fixed preloading of references to internal classes.
1 parent 7ae3a47 commit 8d3429c

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

ext/opcache/zend_persist.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ static void zend_persist_class_method(zval *zv)
718718
static void zend_persist_property_info(zval *zv)
719719
{
720720
zend_property_info *prop = zend_shared_alloc_get_xlat_entry(Z_PTR_P(zv));
721+
zend_class_entry *ce;
721722

722723
if (prop) {
723724
Z_PTR_P(zv) = prop;
@@ -728,7 +729,10 @@ static void zend_persist_property_info(zval *zv)
728729
} else {
729730
prop = Z_PTR_P(zv) = zend_shared_memdup_arena_put(Z_PTR_P(zv), sizeof(zend_property_info));
730731
}
731-
prop->ce = zend_shared_alloc_get_xlat_entry(prop->ce);
732+
ce = zend_shared_alloc_get_xlat_entry(prop->ce);
733+
if (ce) {
734+
prop->ce = ce;
735+
}
732736
zend_accel_store_interned_string(prop->name);
733737
if (prop->doc_comment) {
734738
if (ZCG(accel_directives).save_comments) {
@@ -746,6 +750,7 @@ static void zend_persist_property_info(zval *zv)
746750
static void zend_persist_class_constant(zval *zv)
747751
{
748752
zend_class_constant *c = zend_shared_alloc_get_xlat_entry(Z_PTR_P(zv));
753+
zend_class_entry *ce;
749754

750755
if (c) {
751756
Z_PTR_P(zv) = c;
@@ -757,7 +762,10 @@ static void zend_persist_class_constant(zval *zv)
757762
c = Z_PTR_P(zv) = zend_shared_memdup_arena_put(Z_PTR_P(zv), sizeof(zend_class_constant));
758763
}
759764
zend_persist_zval(&c->value);
760-
c->ce = zend_shared_alloc_get_xlat_entry(c->ce);
765+
ce = zend_shared_alloc_get_xlat_entry(c->ce);
766+
if (ce) {
767+
c->ce = ce;
768+
}
761769
if (c->doc_comment) {
762770
if (ZCG(accel_directives).save_comments) {
763771
zend_string *doc_comment = zend_shared_alloc_get_xlat_entry(c->doc_comment);

0 commit comments

Comments
 (0)