Skip to content

Commit 969a472

Browse files
committed
Automatically handle ZEND_ACC_MAY_BE_CYCLIC for extensions
If get_gc is customized, assume cyclic classes for now.
1 parent f6e49bb commit 969a472

22 files changed

+17
-49
lines changed

Zend/zend_API.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2390,6 +2390,8 @@ ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module) /* {{{ */
23902390
}
23912391
module->module_started = 1;
23922392

2393+
uint32_t prev_class_count = zend_hash_num_elements(CG(class_table));
2394+
23932395
/* Check module dependencies */
23942396
if (module->deps) {
23952397
const zend_module_dep *dep = module->deps;
@@ -2434,6 +2436,19 @@ ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module) /* {{{ */
24342436
}
24352437
EG(current_module) = NULL;
24362438
}
2439+
2440+
/* Mark classes with custom get_gc handler as potentially cyclic, even if
2441+
* their properties don't indicate so. */
2442+
if (prev_class_count != zend_hash_num_elements(CG(class_table))) {
2443+
Bucket *p;
2444+
ZEND_HASH_MAP_FOREACH_BUCKET_FROM(CG(class_table), p, prev_class_count) {
2445+
zend_class_entry *ce = Z_PTR(p->val);
2446+
if (ce->default_object_handlers->get_gc != zend_std_get_gc) {
2447+
ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
2448+
}
2449+
} ZEND_HASH_FOREACH_END();
2450+
}
2451+
24372452
return SUCCESS;
24382453
}
24392454
/* }}} */

Zend/zend_closures.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,9 +705,8 @@ void zend_register_closure_ce(void) /* {{{ */
705705
zend_ce_closure = register_class_Closure();
706706
zend_ce_closure->create_object = zend_closure_new;
707707
zend_ce_closure->default_object_handlers = &closure_handlers;
708-
/* FIXME: Potentially improve during construction of closure? static closures
709-
* not binding by references can't be cyclic. */
710-
zend_ce_closure->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
708+
/* FIXME: Potentially infer ZEND_ACC_MAY_BE_CYCLIC during construction of
709+
* closure? static closures not binding by references can't be cyclic. */
711710

712711
memcpy(&closure_handlers, &std_object_handlers, sizeof(zend_object_handlers));
713712
closure_handlers.free_obj = zend_closure_free_storage;

Zend/zend_fibers.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1107,7 +1107,6 @@ void zend_register_fiber_ce(void)
11071107
zend_ce_fiber = register_class_Fiber();
11081108
zend_ce_fiber->create_object = zend_fiber_object_create;
11091109
zend_ce_fiber->default_object_handlers = &zend_fiber_handlers;
1110-
zend_ce_fiber->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
11111110

11121111
zend_fiber_handlers = std_object_handlers;
11131112
zend_fiber_handlers.dtor_obj = zend_fiber_object_destroy;

Zend/zend_generators.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1215,7 +1215,6 @@ void zend_register_generator_ce(void) /* {{{ */
12151215
/* get_iterator has to be assigned *after* implementing the interface */
12161216
zend_ce_generator->get_iterator = zend_generator_get_iterator;
12171217
zend_ce_generator->default_object_handlers = &zend_generator_handlers;
1218-
zend_ce_generator->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
12191218

12201219
memcpy(&zend_generator_handlers, &std_object_handlers, sizeof(zend_object_handlers));
12211220
zend_generator_handlers.free_obj = zend_generator_free_storage;

Zend/zend_weakrefs.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,6 @@ void zend_register_weakref_ce(void) /* {{{ */
788788
zend_ce_weakmap->create_object = zend_weakmap_create_object;
789789
zend_ce_weakmap->get_iterator = zend_weakmap_get_iterator;
790790
zend_ce_weakmap->default_object_handlers = &zend_weakmap_handlers;
791-
zend_ce_weakmap->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
792791

793792
memcpy(&zend_weakmap_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
794793
zend_weakmap_handlers.offset = XtOffsetOf(zend_weakmap, std);

ext/curl/interface.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,6 @@ PHP_MINIT_FUNCTION(curl)
395395
curl_ce = register_class_CurlHandle();
396396
curl_ce->create_object = curl_create_object;
397397
curl_ce->default_object_handlers = &curl_object_handlers;
398-
curl_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
399398

400399
memcpy(&curl_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
401400
curl_object_handlers.offset = XtOffsetOf(php_curl, std);

ext/curl/multi.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,6 @@ static zend_object_handlers curl_multi_handlers;
606606
void curl_multi_register_handlers(void) {
607607
curl_multi_ce->create_object = curl_multi_create_object;
608608
curl_multi_ce->default_object_handlers = &curl_multi_handlers;
609-
curl_multi_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
610609

611610
memcpy(&curl_multi_handlers, &std_object_handlers, sizeof(zend_object_handlers));
612611
curl_multi_handlers.offset = XtOffsetOf(php_curlm, std);

ext/dom/php_dom.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,6 @@ PHP_MINIT_FUNCTION(dom)
12921292
dom_xpath_class_entry = register_class_DOMXPath();
12931293
dom_xpath_class_entry->create_object = dom_xpath_objects_new;
12941294
dom_xpath_class_entry->default_object_handlers = &dom_xpath_object_handlers;
1295-
dom_xpath_class_entry->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
12961295

12971296
zend_hash_init(&dom_xpath_prop_handlers, 0, NULL, NULL, true);
12981297
DOM_REGISTER_PROP_HANDLER(&dom_xpath_prop_handlers, "document", dom_xpath_document_read, NULL);
@@ -1302,7 +1301,6 @@ PHP_MINIT_FUNCTION(dom)
13021301
dom_modern_xpath_class_entry = register_class_Dom_XPath();
13031302
dom_modern_xpath_class_entry->create_object = dom_xpath_objects_new;
13041303
dom_modern_xpath_class_entry->default_object_handlers = &dom_xpath_object_handlers;
1305-
dom_modern_xpath_class_entry->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
13061304

13071305
zend_hash_add_new_ptr(&classes, dom_modern_xpath_class_entry->name, &dom_xpath_prop_handlers);
13081306
#endif

ext/pdo/pdo_dbh.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1449,7 +1449,6 @@ void pdo_dbh_init(int module_number)
14491449
pdo_dbh_ce = register_class_PDO();
14501450
pdo_dbh_ce->create_object = pdo_dbh_new;
14511451
pdo_dbh_ce->default_object_handlers = &pdo_dbh_object_handlers;
1452-
pdo_dbh_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
14531452

14541453
memcpy(&pdo_dbh_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
14551454
pdo_dbh_object_handlers.offset = XtOffsetOf(pdo_dbh_object_t, std);

ext/pdo/pdo_stmt.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2491,7 +2491,6 @@ void pdo_stmt_init(void)
24912491
pdo_dbstmt_ce->get_iterator = pdo_stmt_iter_get;
24922492
pdo_dbstmt_ce->create_object = pdo_dbstmt_new;
24932493
pdo_dbstmt_ce->default_object_handlers = &pdo_dbstmt_object_handlers;
2494-
pdo_dbstmt_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
24952494

24962495
memcpy(&pdo_dbstmt_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
24972496
pdo_dbstmt_object_handlers.offset = XtOffsetOf(pdo_stmt_t, std);

ext/reflection/php_reflection.c

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7692,113 +7692,91 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
76927692

76937693
reflection_function_abstract_ptr = register_class_ReflectionFunctionAbstract(reflector_ptr);
76947694
reflection_function_abstract_ptr->default_object_handlers = &reflection_object_handlers;
7695-
reflection_function_abstract_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
76967695
reflection_function_abstract_ptr->create_object = reflection_objects_new;
76977696

76987697
reflection_function_ptr = register_class_ReflectionFunction(reflection_function_abstract_ptr);
76997698
reflection_function_ptr->create_object = reflection_objects_new;
77007699
reflection_function_ptr->default_object_handlers = &reflection_object_handlers;
7701-
reflection_function_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77027700

77037701
reflection_generator_ptr = register_class_ReflectionGenerator();
77047702
reflection_generator_ptr->create_object = reflection_objects_new;
77057703
reflection_generator_ptr->default_object_handlers = &reflection_object_handlers;
7706-
reflection_generator_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77077704

77087705
reflection_parameter_ptr = register_class_ReflectionParameter(reflector_ptr);
77097706
reflection_parameter_ptr->create_object = reflection_objects_new;
77107707
reflection_parameter_ptr->default_object_handlers = &reflection_object_handlers;
7711-
reflection_parameter_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77127708

77137709
reflection_type_ptr = register_class_ReflectionType(zend_ce_stringable);
77147710
reflection_type_ptr->create_object = reflection_objects_new;
77157711
reflection_type_ptr->default_object_handlers = &reflection_object_handlers;
7716-
reflection_type_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77177712

77187713
reflection_named_type_ptr = register_class_ReflectionNamedType(reflection_type_ptr);
77197714
reflection_named_type_ptr->create_object = reflection_objects_new;
77207715
reflection_named_type_ptr->default_object_handlers = &reflection_object_handlers;
7721-
reflection_named_type_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77227716

77237717
reflection_union_type_ptr = register_class_ReflectionUnionType(reflection_type_ptr);
77247718
reflection_union_type_ptr->create_object = reflection_objects_new;
77257719
reflection_union_type_ptr->default_object_handlers = &reflection_object_handlers;
7726-
reflection_union_type_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77277720

77287721
reflection_intersection_type_ptr = register_class_ReflectionIntersectionType(reflection_type_ptr);
77297722
reflection_intersection_type_ptr->create_object = reflection_objects_new;
77307723
reflection_intersection_type_ptr->default_object_handlers = &reflection_object_handlers;
7731-
reflection_intersection_type_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77327724

77337725
reflection_method_ptr = register_class_ReflectionMethod(reflection_function_abstract_ptr);
77347726
reflection_method_ptr->create_object = reflection_objects_new;
77357727
reflection_method_ptr->default_object_handlers = &reflection_object_handlers;
7736-
reflection_method_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77377728

77387729
reflection_class_ptr = register_class_ReflectionClass(reflector_ptr);
77397730
reflection_class_ptr->create_object = reflection_objects_new;
77407731
reflection_class_ptr->default_object_handlers = &reflection_object_handlers;
7741-
reflection_class_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77427732

77437733
reflection_object_ptr = register_class_ReflectionObject(reflection_class_ptr);
77447734
reflection_object_ptr->create_object = reflection_objects_new;
77457735
reflection_object_ptr->default_object_handlers = &reflection_object_handlers;
7746-
reflection_object_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77477736

77487737
reflection_property_ptr = register_class_ReflectionProperty(reflector_ptr);
77497738
reflection_property_ptr->create_object = reflection_objects_new;
77507739
reflection_property_ptr->default_object_handlers = &reflection_object_handlers;
7751-
reflection_property_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77527740

77537741
reflection_class_constant_ptr = register_class_ReflectionClassConstant(reflector_ptr);
77547742
reflection_class_constant_ptr->create_object = reflection_objects_new;
77557743
reflection_class_constant_ptr->default_object_handlers = &reflection_object_handlers;
7756-
reflection_class_constant_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77577744

77587745
reflection_extension_ptr = register_class_ReflectionExtension(reflector_ptr);
77597746
reflection_extension_ptr->create_object = reflection_objects_new;
77607747
reflection_extension_ptr->default_object_handlers = &reflection_object_handlers;
7761-
reflection_extension_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77627748

77637749
reflection_zend_extension_ptr = register_class_ReflectionZendExtension(reflector_ptr);
77647750
reflection_zend_extension_ptr->create_object = reflection_objects_new;
77657751
reflection_zend_extension_ptr->default_object_handlers = &reflection_object_handlers;
7766-
reflection_zend_extension_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77677752

77687753
reflection_reference_ptr = register_class_ReflectionReference();
77697754
reflection_reference_ptr->create_object = reflection_objects_new;
77707755
reflection_reference_ptr->default_object_handlers = &reflection_object_handlers;
7771-
reflection_reference_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77727756

77737757
reflection_attribute_ptr = register_class_ReflectionAttribute(reflector_ptr);
77747758
reflection_attribute_ptr->create_object = reflection_objects_new;
77757759
reflection_attribute_ptr->default_object_handlers = &reflection_object_handlers;
7776-
reflection_attribute_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77777760

77787761
reflection_enum_ptr = register_class_ReflectionEnum(reflection_class_ptr);
77797762
reflection_enum_ptr->create_object = reflection_objects_new;
77807763
reflection_enum_ptr->default_object_handlers = &reflection_object_handlers;
7781-
reflection_enum_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77827764

77837765
reflection_enum_unit_case_ptr = register_class_ReflectionEnumUnitCase(reflection_class_constant_ptr);
77847766
reflection_enum_unit_case_ptr->create_object = reflection_objects_new;
77857767
reflection_enum_unit_case_ptr->default_object_handlers = &reflection_object_handlers;
7786-
reflection_enum_unit_case_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77877768

77887769
reflection_enum_backed_case_ptr = register_class_ReflectionEnumBackedCase(reflection_enum_unit_case_ptr);
77897770
reflection_enum_backed_case_ptr->create_object = reflection_objects_new;
77907771
reflection_enum_backed_case_ptr->default_object_handlers = &reflection_object_handlers;
7791-
reflection_enum_backed_case_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77927772

77937773
reflection_fiber_ptr = register_class_ReflectionFiber();
77947774
reflection_fiber_ptr->create_object = reflection_objects_new;
77957775
reflection_fiber_ptr->default_object_handlers = &reflection_object_handlers;
7796-
reflection_fiber_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
77977776

77987777
reflection_constant_ptr = register_class_ReflectionConstant(reflector_ptr);
77997778
reflection_constant_ptr->create_object = reflection_objects_new;
78007779
reflection_constant_ptr->default_object_handlers = &reflection_object_handlers;
7801-
reflection_constant_ptr->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
78027780

78037781
reflection_property_hook_type_ptr = register_class_PropertyHookType();
78047782

ext/simplexml/simplexml.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2654,7 +2654,6 @@ PHP_MINIT_FUNCTION(simplexml)
26542654
ce_SimpleXMLElement = register_class_SimpleXMLElement(zend_ce_stringable, zend_ce_countable, spl_ce_RecursiveIterator);
26552655
ce_SimpleXMLElement->create_object = sxe_object_new;
26562656
ce_SimpleXMLElement->default_object_handlers = &sxe_object_handlers;
2657-
ce_SimpleXMLElement->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
26582657
ce_SimpleXMLElement->get_iterator = php_sxe_get_iterator;
26592658

26602659
memcpy(&sxe_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));

ext/sockets/sockets.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,6 @@ static PHP_MINIT_FUNCTION(sockets)
455455
socket_ce = register_class_Socket();
456456
socket_ce->create_object = socket_create_object;
457457
socket_ce->default_object_handlers = &socket_object_handlers;
458-
socket_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
459458

460459
memcpy(&socket_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
461460
socket_object_handlers.offset = XtOffsetOf(php_socket, std);

ext/spl/spl_array.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,7 +1883,6 @@ PHP_MINIT_FUNCTION(spl_array)
18831883
spl_ce_ArrayObject = register_class_ArrayObject(zend_ce_aggregate, zend_ce_arrayaccess, zend_ce_serializable, zend_ce_countable);
18841884
spl_ce_ArrayObject->create_object = spl_array_object_new;
18851885
spl_ce_ArrayObject->default_object_handlers = &spl_handler_ArrayObject;
1886-
spl_ce_ArrayObject->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
18871886

18881887
memcpy(&spl_handler_ArrayObject, &std_object_handlers, sizeof(zend_object_handlers));
18891888

@@ -1910,7 +1909,6 @@ PHP_MINIT_FUNCTION(spl_array)
19101909
spl_ce_ArrayIterator = register_class_ArrayIterator(spl_ce_SeekableIterator, zend_ce_arrayaccess, zend_ce_serializable, zend_ce_countable);
19111910
spl_ce_ArrayIterator->create_object = spl_array_object_new;
19121911
spl_ce_ArrayIterator->default_object_handlers = &spl_handler_ArrayObject;
1913-
spl_ce_ArrayIterator->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
19141912
spl_ce_ArrayIterator->get_iterator = spl_array_get_iterator;
19151913

19161914
spl_ce_RecursiveArrayIterator = register_class_RecursiveArrayIterator(spl_ce_ArrayIterator, spl_ce_RecursiveIterator);

ext/spl/spl_dllist.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,6 @@ PHP_MINIT_FUNCTION(spl_dllist) /* {{{ */
12561256
);
12571257
spl_ce_SplDoublyLinkedList->create_object = spl_dllist_object_new;
12581258
spl_ce_SplDoublyLinkedList->default_object_handlers = &spl_handler_SplDoublyLinkedList;
1259-
spl_ce_SplDoublyLinkedList->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
12601259
spl_ce_SplDoublyLinkedList->get_iterator = spl_dllist_get_iterator;
12611260

12621261
memcpy(&spl_handler_SplDoublyLinkedList, &std_object_handlers, sizeof(zend_object_handlers));

ext/spl/spl_fixedarray.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,6 @@ PHP_MINIT_FUNCTION(spl_fixedarray)
964964
zend_ce_aggregate, zend_ce_arrayaccess, zend_ce_countable, php_json_serializable_ce);
965965
spl_ce_SplFixedArray->create_object = spl_fixedarray_new;
966966
spl_ce_SplFixedArray->default_object_handlers = &spl_handler_SplFixedArray;
967-
spl_ce_SplFixedArray->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
968967
spl_ce_SplFixedArray->get_iterator = spl_fixedarray_get_iterator;
969968

970969
memcpy(&spl_handler_SplFixedArray, &std_object_handlers, sizeof(zend_object_handlers));

ext/spl/spl_heap.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,6 @@ PHP_MINIT_FUNCTION(spl_heap) /* {{{ */
11411141
spl_ce_SplHeap = register_class_SplHeap(zend_ce_iterator, zend_ce_countable);
11421142
spl_ce_SplHeap->create_object = spl_heap_object_new;
11431143
spl_ce_SplHeap->default_object_handlers = &spl_handler_SplHeap;
1144-
spl_ce_SplHeap->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
11451144
spl_ce_SplHeap->get_iterator = spl_heap_get_iterator;
11461145

11471146
memcpy(&spl_handler_SplHeap, &std_object_handlers, sizeof(zend_object_handlers));
@@ -1163,7 +1162,6 @@ PHP_MINIT_FUNCTION(spl_heap) /* {{{ */
11631162
spl_ce_SplPriorityQueue = register_class_SplPriorityQueue(zend_ce_iterator, zend_ce_countable);
11641163
spl_ce_SplPriorityQueue->create_object = spl_heap_object_new;
11651164
spl_ce_SplPriorityQueue->default_object_handlers = &spl_handler_SplPriorityQueue;
1166-
spl_ce_SplPriorityQueue->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
11671165
spl_ce_SplPriorityQueue->get_iterator = spl_pqueue_get_iterator;
11681166

11691167
memcpy(&spl_handler_SplPriorityQueue, &std_object_handlers, sizeof(zend_object_handlers));

ext/spl/spl_iterators.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3108,7 +3108,6 @@ PHP_MINIT_FUNCTION(spl_iterators)
31083108
spl_ce_RecursiveIteratorIterator = register_class_RecursiveIteratorIterator(spl_ce_OuterIterator);
31093109
spl_ce_RecursiveIteratorIterator->create_object = spl_RecursiveIteratorIterator_new;
31103110
spl_ce_RecursiveIteratorIterator->default_object_handlers = &spl_handlers_rec_it_it;
3111-
spl_ce_RecursiveIteratorIterator->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
31123111
spl_ce_RecursiveIteratorIterator->get_iterator = spl_recursive_it_get_iterator;
31133112

31143113
memcpy(&spl_handlers_rec_it_it, &std_object_handlers, sizeof(zend_object_handlers));
@@ -3128,7 +3127,6 @@ PHP_MINIT_FUNCTION(spl_iterators)
31283127
spl_ce_IteratorIterator = register_class_IteratorIterator(spl_ce_OuterIterator);
31293128
spl_ce_IteratorIterator->create_object = spl_dual_it_new;
31303129
spl_ce_IteratorIterator->default_object_handlers = &spl_handlers_dual_it;
3131-
spl_ce_IteratorIterator->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
31323130

31333131
spl_ce_FilterIterator = register_class_FilterIterator(spl_ce_IteratorIterator);
31343132
spl_ce_FilterIterator->create_object = spl_dual_it_new;

ext/spl/spl_observer.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,6 @@ PHP_MINIT_FUNCTION(spl_observer)
13791379
spl_ce_SplObjectStorage = register_class_SplObjectStorage(zend_ce_countable, spl_ce_SeekableIterator, zend_ce_serializable, zend_ce_arrayaccess);
13801380
spl_ce_SplObjectStorage->create_object = spl_SplObjectStorage_new;
13811381
spl_ce_SplObjectStorage->default_object_handlers = &spl_handler_SplObjectStorage;
1382-
spl_ce_SplObjectStorage->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
13831382

13841383
memcpy(&spl_handler_SplObjectStorage, &std_object_handlers, sizeof(zend_object_handlers));
13851384

@@ -1396,7 +1395,6 @@ PHP_MINIT_FUNCTION(spl_observer)
13961395
spl_ce_MultipleIterator = register_class_MultipleIterator(zend_ce_iterator);
13971396
spl_ce_MultipleIterator->create_object = spl_SplObjectStorage_new;
13981397
spl_ce_MultipleIterator->default_object_handlers = &spl_handler_SplObjectStorage;
1399-
spl_ce_MultipleIterator->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
14001398

14011399
return SUCCESS;
14021400
}

ext/sqlite3/sqlite3.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2411,7 +2411,6 @@ PHP_MINIT_FUNCTION(sqlite3)
24112411
php_sqlite3_sc_entry = register_class_SQLite3();
24122412
php_sqlite3_sc_entry->create_object = php_sqlite3_object_new;
24132413
php_sqlite3_sc_entry->default_object_handlers = &sqlite3_object_handlers;
2414-
php_sqlite3_sc_entry->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
24152414

24162415
/* Register SQLite 3 Prepared Statement Class */
24172416
sqlite3_stmt_object_handlers.offset = XtOffsetOf(php_sqlite3_stmt, zo);

ext/xml/xml.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ PHP_MINIT_FUNCTION(xml)
228228
xml_parser_ce = register_class_XMLParser();
229229
xml_parser_ce->create_object = xml_parser_create_object;
230230
xml_parser_ce->default_object_handlers = &xml_parser_object_handlers;
231-
xml_parser_ce->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
232231

233232
memcpy(&xml_parser_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
234233
xml_parser_object_handlers.offset = XtOffsetOf(xml_parser, std);

ext/xsl/php_xsl.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ PHP_MINIT_FUNCTION(xsl)
278278
xsl_xsltprocessor_class_entry = register_class_XSLTProcessor();
279279
xsl_xsltprocessor_class_entry->create_object = xsl_objects_new;
280280
xsl_xsltprocessor_class_entry->default_object_handlers = &xsl_object_handlers;
281-
xsl_xsltprocessor_class_entry->ce_flags |= ZEND_ACC_MAY_BE_CYCLIC;
282281

283282
#ifdef HAVE_XSL_EXSLT
284283
exsltRegisterAll();

0 commit comments

Comments
 (0)