]> granicus.if.org Git - php/commitdiff
fix #38653 (memory leak in ReflectionClass::getConstant())
authorAntony Dovgal <tony2001@php.net>
Wed, 30 Aug 2006 10:41:43 +0000 (10:41 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 30 Aug 2006 10:41:43 +0000 (10:41 +0000)
ext/reflection/php_reflection.c
ext/reflection/tests/bug38653.phpt [new file with mode: 0644]

index e75cadea1bf85b373149daf21ca568e9abb1dfa4..24eea39a0f462400033059de8dbdb5cd03a31eb1 100644 (file)
@@ -206,6 +206,7 @@ static void _default_get_entry(zval *object, char *name, int name_len, zval *ret
 
        *return_value = **value;
        zval_copy_ctor(return_value);
+       INIT_PZVAL(return_value);
 }
 
 static void reflection_register_implement(zend_class_entry *class_entry, zend_class_entry *interface_entry TSRMLS_DC)
@@ -3261,6 +3262,7 @@ ZEND_METHOD(reflection_class, getConstant)
        }
        *return_value = **value;
        zval_copy_ctor(return_value);
+       INIT_PZVAL(return_value);
 }
 /* }}} */
 
diff --git a/ext/reflection/tests/bug38653.phpt b/ext/reflection/tests/bug38653.phpt
new file mode 100644 (file)
index 0000000..48f1c6c
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--
+Bug #38653 (memory leak in ReflectionClass::getConstant())
+--FILE--
+<?php
+
+class foo {
+           const cons = 10;
+           const cons1 = "";
+           const cons2 = "test";
+}
+
+class bar extends foo {
+}
+
+$foo = new ReflectionClass("foo");
+var_dump($foo->getConstant("cons"));
+var_dump($foo->getConstant("cons1"));
+var_dump($foo->getConstant("cons2"));
+var_dump($foo->getConstant("no such const"));
+
+echo "Done\n";
+?>
+--EXPECTF--    
+int(10)
+string(0) ""
+string(4) "test"
+bool(false)
+Done
+--UEXPECTF--
+int(10)
+unicode(0) ""
+unicode(4) "test"
+bool(false)
+Done