summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schlüter <johannes@php.net>2010-11-21 12:24:09 +0000
committerJohannes Schlüter <johannes@php.net>2010-11-21 12:24:09 +0000
commit9ea04e1e46f0e4e01d5c96ddf46a738abeafb73c (patch)
treeb52fac97730c16294b4ddc7a87e9ae1ed0d3540e
parent1ac484d1a10bbb57760f4bb83b77dc3ae4885dc9 (diff)
downloadphp-git-9ea04e1e46f0e4e01d5c96ddf46a738abeafb73c.tar.gz
- Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without constructors
-rw-r--r--NEWS2
-rw-r--r--ext/reflection/php_reflection.c2
-rw-r--r--ext/reflection/tests/bug52854.phpt28
3 files changed, 31 insertions, 1 deletions
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--
+<?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