@@ -2279,14 +2279,14 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
2279
2279
return FAILURE ;
2280
2280
}
2281
2281
}
2282
- lowercase_name = zend_string_tolower_ex (internal_function -> function_name , 1 );
2282
+ lowercase_name = zend_string_tolower_ex (internal_function -> function_name , type == MODULE_PERSISTENT );
2283
2283
lowercase_name = zend_new_interned_string (lowercase_name );
2284
2284
reg_function = malloc (sizeof (zend_internal_function ));
2285
2285
memcpy (reg_function , & function , sizeof (zend_internal_function ));
2286
2286
if (zend_hash_add_ptr (target_function_table , lowercase_name , reg_function ) == NULL ) {
2287
2287
unload = 1 ;
2288
2288
free (reg_function );
2289
- zend_string_release_ex (lowercase_name , 1 );
2289
+ zend_string_release (lowercase_name );
2290
2290
break ;
2291
2291
}
2292
2292
@@ -2378,7 +2378,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
2378
2378
}
2379
2379
ptr ++ ;
2380
2380
count ++ ;
2381
- zend_string_release_ex (lowercase_name , 1 );
2381
+ zend_string_release (lowercase_name );
2382
2382
}
2383
2383
if (unload ) { /* before unloading, display all remaining bad function in the module */
2384
2384
if (scope ) {
@@ -2724,10 +2724,10 @@ static zend_class_entry *do_register_internal_class(zend_class_entry *orig_class
2724
2724
class_entry -> info .internal .module = EG (current_module );
2725
2725
2726
2726
if (class_entry -> info .internal .builtin_functions ) {
2727
- zend_register_functions (class_entry , class_entry -> info .internal .builtin_functions , & class_entry -> function_table , MODULE_PERSISTENT );
2727
+ zend_register_functions (class_entry , class_entry -> info .internal .builtin_functions , & class_entry -> function_table , EG ( current_module ) -> type );
2728
2728
}
2729
2729
2730
- lowercase_name = zend_string_tolower_ex (orig_class_entry -> name , 1 );
2730
+ lowercase_name = zend_string_tolower_ex (orig_class_entry -> name , EG ( current_module ) -> type == MODULE_PERSISTENT );
2731
2731
lowercase_name = zend_new_interned_string (lowercase_name );
2732
2732
zend_hash_update_ptr (CG (class_table ), lowercase_name , class_entry );
2733
2733
zend_string_release_ex (lowercase_name , 1 );
@@ -2786,6 +2786,11 @@ ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zen
2786
2786
{
2787
2787
zend_string * lcname ;
2788
2788
2789
+ /* TODO: Move this out of here in 7.4. */
2790
+ if (persistent && EG (current_module ) && EG (current_module )-> type == MODULE_TEMPORARY ) {
2791
+ persistent = 0 ;
2792
+ }
2793
+
2789
2794
if (name [0 ] == '\\' ) {
2790
2795
lcname = zend_string_alloc (name_len - 1 , persistent );
2791
2796
zend_str_tolower_copy (ZSTR_VAL (lcname ), name + 1 , name_len - 1 );
@@ -3696,6 +3701,11 @@ static inline zend_string *zval_make_interned_string(zval *zv) /* {{{ */
3696
3701
return Z_STR_P (zv );
3697
3702
}
3698
3703
3704
+ static zend_always_inline zend_bool is_persistent_class (zend_class_entry * ce ) {
3705
+ return (ce -> type & ZEND_INTERNAL_CLASS )
3706
+ && ce -> info .internal .module -> type == MODULE_PERSISTENT ;
3707
+ }
3708
+
3699
3709
ZEND_API int zend_declare_property_ex (zend_class_entry * ce , zend_string * name , zval * property , int access_type , zend_string * doc_comment ) /* {{{ */
3700
3710
{
3701
3711
zend_property_info * property_info , * property_info_ptr ;
@@ -3761,10 +3771,10 @@ ZEND_API int zend_declare_property_ex(zend_class_entry *ce, zend_string *name, z
3761
3771
if (access_type & ZEND_ACC_PUBLIC ) {
3762
3772
property_info -> name = zend_string_copy (name );
3763
3773
} else if (access_type & ZEND_ACC_PRIVATE ) {
3764
- property_info -> name = zend_mangle_property_name (ZSTR_VAL (ce -> name ), ZSTR_LEN (ce -> name ), ZSTR_VAL (name ), ZSTR_LEN (name ), ce -> type & ZEND_INTERNAL_CLASS );
3774
+ property_info -> name = zend_mangle_property_name (ZSTR_VAL (ce -> name ), ZSTR_LEN (ce -> name ), ZSTR_VAL (name ), ZSTR_LEN (name ), is_persistent_class ( ce ) );
3765
3775
} else {
3766
3776
ZEND_ASSERT (access_type & ZEND_ACC_PROTECTED );
3767
- property_info -> name = zend_mangle_property_name ("*" , 1 , ZSTR_VAL (name ), ZSTR_LEN (name ), ce -> type & ZEND_INTERNAL_CLASS );
3777
+ property_info -> name = zend_mangle_property_name ("*" , 1 , ZSTR_VAL (name ), ZSTR_LEN (name ), is_persistent_class ( ce ) );
3768
3778
}
3769
3779
3770
3780
property_info -> name = zend_new_interned_string (property_info -> name );
@@ -3779,7 +3789,7 @@ ZEND_API int zend_declare_property_ex(zend_class_entry *ce, zend_string *name, z
3779
3789
3780
3790
ZEND_API int zend_declare_property (zend_class_entry * ce , const char * name , size_t name_length , zval * property , int access_type ) /* {{{ */
3781
3791
{
3782
- zend_string * key = zend_string_init (name , name_length , ce -> type & ZEND_INTERNAL_CLASS );
3792
+ zend_string * key = zend_string_init (name , name_length , is_persistent_class ( ce ) );
3783
3793
int ret = zend_declare_property_ex (ce , key , property , access_type , NULL );
3784
3794
zend_string_release (key );
3785
3795
return ret ;
0 commit comments