@@ -582,6 +582,36 @@ PHPAPI timelib_tzinfo *get_timezone_info(void)
582
582
}
583
583
return tzi ;
584
584
}
585
+
586
+ static void update_property (zend_object * object , zend_string * key , zval * prop_val )
587
+ {
588
+ if (ZSTR_VAL (key )[0 ] == '\0' ) { // not public
589
+ const char * class_name , * prop_name ;
590
+ size_t prop_name_len ;
591
+
592
+ if (zend_unmangle_property_name_ex (key , & class_name , & prop_name , & prop_name_len ) == SUCCESS ) {
593
+ if (class_name [0 ] != '*' ) { // private
594
+ zend_string * cname ;
595
+ zend_class_entry * ce ;
596
+
597
+ cname = zend_string_init (class_name , strlen (class_name ), 0 );
598
+ ce = zend_lookup_class (cname );
599
+
600
+ if (ce ) {
601
+ zend_update_property (ce , object , prop_name , prop_name_len , prop_val );
602
+ }
603
+
604
+ zend_string_release_ex (cname , 0 );
605
+ } else { // protected
606
+ zend_update_property (object -> ce , object , prop_name , prop_name_len , prop_val );
607
+ }
608
+ }
609
+ return ;
610
+ }
611
+
612
+ // public
613
+ zend_update_property (object -> ce , object , ZSTR_VAL (key ), ZSTR_LEN (key ), prop_val );
614
+ }
585
615
/* }}} */
586
616
587
617
@@ -2822,7 +2852,7 @@ static void restore_custom_datetime_properties(zval *object, HashTable *myht)
2822
2852
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_time_is_internal_property (prop_name )) {
2823
2853
continue ;
2824
2854
}
2825
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
2855
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
2826
2856
} ZEND_HASH_FOREACH_END ();
2827
2857
}
2828
2858
@@ -3924,7 +3954,7 @@ static void restore_custom_datetimezone_properties(zval *object, HashTable *myht
3924
3954
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_timezone_is_internal_property (prop_name )) {
3925
3955
continue ;
3926
3956
}
3927
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
3957
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
3928
3958
} ZEND_HASH_FOREACH_END ();
3929
3959
}
3930
3960
@@ -4551,7 +4581,7 @@ static void restore_custom_dateinterval_properties(zval *object, HashTable *myht
4551
4581
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_interval_is_internal_property (prop_name )) {
4552
4582
continue ;
4553
4583
}
4554
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
4584
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
4555
4585
} ZEND_HASH_FOREACH_END ();
4556
4586
}
4557
4587
@@ -5551,7 +5581,7 @@ static void restore_custom_dateperiod_properties(zval *object, HashTable *myht)
5551
5581
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_period_is_internal_property (prop_name )) {
5552
5582
continue ;
5553
5583
}
5554
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
5584
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
5555
5585
} ZEND_HASH_FOREACH_END ();
5556
5586
}
5557
5587
0 commit comments