@@ -565,6 +565,36 @@ PHPAPI timelib_tzinfo *get_timezone_info(void)
565
565
}
566
566
return tzi ;
567
567
}
568
+
569
+ static void update_property (zend_object * object , zend_string * key , zval * prop_val )
570
+ {
571
+ if (ZSTR_VAL (key )[0 ] == '\0' ) { // not public
572
+ const char * class_name , * prop_name ;
573
+ size_t prop_name_len ;
574
+
575
+ if (zend_unmangle_property_name_ex (key , & class_name , & prop_name , & prop_name_len ) == SUCCESS ) {
576
+ if (class_name [0 ] != '*' ) { // private
577
+ zend_string * cname ;
578
+ zend_class_entry * ce ;
579
+
580
+ cname = zend_string_init (class_name , strlen (class_name ), 0 );
581
+ ce = zend_lookup_class (cname );
582
+
583
+ if (ce ) {
584
+ zend_update_property (ce , object , prop_name , prop_name_len , prop_val );
585
+ }
586
+
587
+ zend_string_release_ex (cname , 0 );
588
+ } else { // protected
589
+ zend_update_property (object -> ce , object , prop_name , prop_name_len , prop_val );
590
+ }
591
+ }
592
+ return ;
593
+ }
594
+
595
+ // public
596
+ zend_update_property (object -> ce , object , ZSTR_VAL (key ), ZSTR_LEN (key ), prop_val );
597
+ }
568
598
/* }}} */
569
599
570
600
@@ -2794,7 +2824,7 @@ static void restore_custom_datetime_properties(zval *object, HashTable *myht)
2794
2824
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_time_is_internal_property (prop_name )) {
2795
2825
continue ;
2796
2826
}
2797
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
2827
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
2798
2828
} ZEND_HASH_FOREACH_END ();
2799
2829
}
2800
2830
@@ -3828,7 +3858,7 @@ static void restore_custom_datetimezone_properties(zval *object, HashTable *myht
3828
3858
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_timezone_is_internal_property (prop_name )) {
3829
3859
continue ;
3830
3860
}
3831
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
3861
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
3832
3862
} ZEND_HASH_FOREACH_END ();
3833
3863
}
3834
3864
@@ -4456,7 +4486,7 @@ static void restore_custom_dateinterval_properties(zval *object, HashTable *myht
4456
4486
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_interval_is_internal_property (prop_name )) {
4457
4487
continue ;
4458
4488
}
4459
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
4489
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
4460
4490
} ZEND_HASH_FOREACH_END ();
4461
4491
}
4462
4492
@@ -5418,7 +5448,7 @@ static void restore_custom_dateperiod_properties(zval *object, HashTable *myht)
5418
5448
if (!prop_name || (Z_TYPE_P (prop_val ) == IS_REFERENCE ) || date_period_is_internal_property (prop_name )) {
5419
5449
continue ;
5420
5450
}
5421
- add_property_zval_ex ( object , ZSTR_VAL ( prop_name ), ZSTR_LEN ( prop_name ) , prop_val );
5451
+ update_property ( Z_OBJ_P ( object ), prop_name , prop_val );
5422
5452
} ZEND_HASH_FOREACH_END ();
5423
5453
}
5424
5454
0 commit comments