]> granicus.if.org Git - php/commitdiff
Fixed bug #49700 (memory leaks in php_date.c if garbage collector is enabled)
authorDmitry Stogov <dmitry@php.net>
Tue, 20 Apr 2010 15:41:35 +0000 (15:41 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 20 Apr 2010 15:41:35 +0000 (15:41 +0000)
ext/date/php_date.c
ext/date/tests/bug49700.phpt [new file with mode: 0644]

index 27025c096ed2e153aaa10c5d9b22b837cfb90c35..48b000272eb29c2b935f306bfec21d78a03af379 100644 (file)
@@ -2080,7 +2080,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC)
 
        props = dateobj->std.properties;
 
-       if (!dateobj->time) {
+       if (!dateobj->time || GC_G(gc_active)) {
                return props;
        }
 
@@ -2223,7 +2223,7 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC)
 
        props = intervalobj->std.properties;
 
-       if (!intervalobj->initialized) {
+       if (!intervalobj->initialized || GC_G(gc_active)) {
                return props;
        }
 
diff --git a/ext/date/tests/bug49700.phpt b/ext/date/tests/bug49700.phpt
new file mode 100644 (file)
index 0000000..a347052
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Bug #49700 (memory leaks in php_date.c if garbage collector is enabled)
+--INI--
+date.timezone=GMT
+--FILE--
+<?php
+gc_enable();
+$objs = array();
+$objs[1] = new DateTime();
+gc_collect_cycles();
+unset($objs);
+echo "OK\n";
+?>
+--EXPECT--
+OK