@@ -2195,16 +2195,22 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC)
2195
2195
return props ;
2196
2196
}
2197
2197
2198
+ if (!dateobj -> props ) {
2199
+ ALLOC_HASHTABLE (dateobj -> props );
2200
+ ZEND_INIT_SYMTABLE_EX (dateobj -> props , 3 , 0 );
2201
+ }
2202
+ zend_hash_merge (dateobj -> props , props , (copy_ctor_func_t ) zval_add_ref , NULL , sizeof (zval * ), 0 );
2203
+
2198
2204
/* first we add the date and time in ISO format */
2199
2205
MAKE_STD_ZVAL (zv );
2200
2206
ZVAL_STRING (zv , date_format ("Y-m-d H:i:s" , 12 , dateobj -> time , 1 ), 0 );
2201
- zend_hash_update (props , "date" , 5 , & zv , sizeof (zval ), NULL );
2207
+ zend_hash_update (dateobj -> props , "date" , sizeof ( "date" ) , & zv , sizeof (zval ), NULL );
2202
2208
2203
2209
/* then we add the timezone name (or similar) */
2204
2210
if (dateobj -> time -> is_localtime ) {
2205
2211
MAKE_STD_ZVAL (zv );
2206
2212
ZVAL_LONG (zv , dateobj -> time -> zone_type );
2207
- zend_hash_update (props , "timezone_type" , 14 , & zv , sizeof (zval ), NULL );
2213
+ zend_hash_update (dateobj -> props , "timezone_type" , sizeof ( "timezone_type" ) , & zv , sizeof (zval ), NULL );
2208
2214
2209
2215
MAKE_STD_ZVAL (zv );
2210
2216
switch (dateobj -> time -> zone_type ) {
@@ -2227,10 +2233,10 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC)
2227
2233
ZVAL_STRING (zv , dateobj -> time -> tz_abbr , 1 );
2228
2234
break ;
2229
2235
}
2230
- zend_hash_update (props , "timezone" , 9 , & zv , sizeof (zval ), NULL );
2236
+ zend_hash_update (dateobj -> props , "timezone" , sizeof ( "timezone" ) , & zv , sizeof (zval ), NULL );
2231
2237
}
2232
2238
2233
- return props ;
2239
+ return dateobj -> props ;
2234
2240
}
2235
2241
2236
2242
static inline zend_object_value date_object_new_timezone_ex (zend_class_entry * class_type , php_timezone_obj * * ptr TSRMLS_DC )
@@ -2465,6 +2471,10 @@ static void date_object_free_storage_date(void *object TSRMLS_DC)
2465
2471
if (intern -> time ) {
2466
2472
timelib_time_dtor (intern -> time );
2467
2473
}
2474
+ if (intern -> props ) {
2475
+ zend_hash_destroy (intern -> props );
2476
+ FREE_HASHTABLE (intern -> props );
2477
+ }
2468
2478
2469
2479
zend_object_std_dtor (& intern -> std TSRMLS_CC );
2470
2480
efree (object );
0 commit comments