@@ -524,6 +524,10 @@ HashTable *zend_weakmap_get_object_key_entry_gc(zend_object *object, zval **tabl
524524 ZEND_ASSERT (zv );
525525 zend_get_gc_buffer_add_ptr (gc_buffer , zv );
526526 zend_get_gc_buffer_add_obj (gc_buffer , & wm -> std );
527+ } else if (ZEND_WEAKREF_GET_TAG (tagged_ptr ) == ZEND_WEAKREF_TAG_BARE_HT ) {
528+ /* Bare HashTables are intentionally ignored, since they are
529+ * intended for internal usage by extensions and might not be
530+ * collectable. */
527531 }
528532 } ZEND_HASH_FOREACH_END ();
529533 } else if (tag == ZEND_WEAKREF_TAG_MAP ) {
@@ -532,6 +536,8 @@ HashTable *zend_weakmap_get_object_key_entry_gc(zend_object *object, zval **tabl
532536 ZEND_ASSERT (zv );
533537 zend_get_gc_buffer_add_ptr (gc_buffer , zv );
534538 zend_get_gc_buffer_add_obj (gc_buffer , & wm -> std );
539+ } else if (ZEND_WEAKREF_GET_TAG (tagged_ptr ) == ZEND_WEAKREF_TAG_BARE_HT ) {
540+ /* Bare HashTables are intentionally ignored (see above) */
535541 }
536542
537543 zend_get_gc_buffer_use (gc_buffer , table , n );
@@ -558,13 +564,19 @@ HashTable *zend_weakmap_get_object_entry_gc(zend_object *object, zval **table, i
558564 zval * zv = zend_hash_index_find (& wm -> ht , obj_key );
559565 ZEND_ASSERT (zv );
560566 zend_get_gc_buffer_add_ptr (gc_buffer , zv );
567+ } else if (ZEND_WEAKREF_GET_TAG (tagged_ptr ) == ZEND_WEAKREF_TAG_BARE_HT ) {
568+ /* Bare HashTables are intentionally ignored
569+ * (see zend_weakmap_get_object_key_entry_gc) */
561570 }
562571 } ZEND_HASH_FOREACH_END ();
563572 } else if (tag == ZEND_WEAKREF_TAG_MAP ) {
564573 zend_weakmap * wm = (zend_weakmap * ) ptr ;
565574 zval * zv = zend_hash_index_find (& wm -> ht , obj_key );
566575 ZEND_ASSERT (zv );
567576 zend_get_gc_buffer_add_ptr (gc_buffer , zv );
577+ } else if (ZEND_WEAKREF_GET_TAG (tagged_ptr ) == ZEND_WEAKREF_TAG_BARE_HT ) {
578+ /* Bare HashTables are intentionally ignored
579+ * (see zend_weakmap_get_object_key_entry_gc) */
568580 }
569581
570582 zend_get_gc_buffer_use (gc_buffer , table , n );
0 commit comments