diff options
author | Johannes Schlüter <johannes@php.net> | 2010-11-21 12:24:09 +0000 |
---|---|---|
committer | Johannes Schlüter <johannes@php.net> | 2010-11-21 12:24:09 +0000 |
commit | 9ea04e1e46f0e4e01d5c96ddf46a738abeafb73c (patch) | |
tree | b52fac97730c16294b4ddc7a87e9ae1ed0d3540e | |
parent | 1ac484d1a10bbb57760f4bb83b77dc3ae4885dc9 (diff) | |
download | php-git-9ea04e1e46f0e4e01d5c96ddf46a738abeafb73c.tar.gz |
- Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without constructors
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/reflection/php_reflection.c | 2 | ||||
-rw-r--r-- | ext/reflection/tests/bug52854.phpt | 28 |
3 files changed, 31 insertions, 1 deletions
@@ -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-- +<?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 |