]> granicus.if.org Git - php/commitdiff
- Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without...
authorJohannes Schlüter <johannes@php.net>
Sun, 21 Nov 2010 12:24:09 +0000 (12:24 +0000)
committerJohannes Schlüter <johannes@php.net>
Sun, 21 Nov 2010 12:24:09 +0000 (12:24 +0000)
NEWS
ext/reflection/php_reflection.c
ext/reflection/tests/bug52854.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index ed83ed21ec98b03c254900a20d65c408275e975a..0d0618bf0e6e820efa348484bbab7525281905ca 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,8 @@
 - Fixed bug #53366 (Reflection doesnt get dynamic property value from
   getProperty()). (Felipe)
 - Fixed bug #53362 (Segmentation fault when extending SplFixedArray). (Felipe)
+- Fixed bug #52854 (ReflectionClass::newInstanceArgs does not work for classes
+  without constructors). (Johannes)
 - Fixed bug #50987 (unaligned memory access in phar.c).
   (geissert at debian dot org, Ilia)
 - Fixed bug #47168 (printf of floating point variable prints maximum of 40 
index 46e49ccd0c2055f6a7838fa352ecaa17fa572577..6ad9128801d590dd31eded943b6e82918b42fcfc 100644 (file)
@@ -4013,7 +4013,7 @@ ZEND_METHOD(reflection_class, newInstanceArgs)
                if (params) {
                        efree(params);
                }
-       } else if (!ZEND_NUM_ARGS()) {
+       } else if (!ZEND_NUM_ARGS() || !argc) {
                object_init_ex(return_value, ce);
        } else {
                zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not have a constructor, so you cannot pass any constructor arguments", ce->name);
diff --git a/ext/reflection/tests/bug52854.phpt b/ext/reflection/tests/bug52854.phpt
new file mode 100644 (file)
index 0000000..94f79d8
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Bug #52854: ReflectionClass::newInstanceArgs does not work for classes without constructors
+--FILE--
+<?php
+class Test {
+}
+$c = new ReflectionClass('Test');
+var_dump(new Test);
+var_dump(new Test());
+var_dump($c->newInstance());
+var_dump($c->newInstanceArgs(array()));
+
+try {
+       var_dump($c->newInstanceArgs(array(1)));
+} catch(ReflectionException $e) {
+       echo $e->getMessage()."\n";
+}
+?>
+--EXPECTF--
+object(Test)#2 (0) {
+}
+object(Test)#2 (0) {
+}
+object(Test)#2 (0) {
+}
+object(Test)#2 (0) {
+}
+Class Test does not have a constructor, so you cannot pass any constructor arguments