From: Johannes Schlüter Date: Sun, 21 Nov 2010 12:24:09 +0000 (+0000) Subject: - Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without... X-Git-Tag: php-5.3.4RC2~37 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ea04e1e46f0e4e01d5c96ddf46a738abeafb73c;p=php - Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without constructors --- diff --git a/NEWS b/NEWS index ed83ed21ec..0d0618bf0e 100644 --- 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 diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 46e49ccd0c..6ad9128801 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -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 index 0000000000..94f79d858b --- /dev/null +++ b/ext/reflection/tests/bug52854.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #52854: ReflectionClass::newInstanceArgs does not work for classes without constructors +--FILE-- +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