summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/reflection/php_reflection.c4
-rw-r--r--ext/reflection/tests/ReflectionParameter_ctor_cast.phpt18
2 files changed, 20 insertions, 2 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 114b2c273f..dfa084caa5 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2306,10 +2306,10 @@ ZEND_METHOD(ReflectionParameter, __construct)
/* nothing to do. don't set is_closure since is the invoke handler,
not the closure itself */
} else if ((fptr = zend_hash_find_ptr(&ce->function_table, lcname)) == NULL) {
+ zend_throw_exception_ex(reflection_exception_ptr, 0,
+ "Method %s::%s() does not exist", ZSTR_VAL(ce->name), ZSTR_VAL(name));
zend_string_release(name);
zend_string_release(lcname);
- zend_throw_exception_ex(reflection_exception_ptr, 0,
- "Method %s::%s() does not exist", ZSTR_VAL(ce->name), Z_STRVAL_P(method));
RETURN_THROWS();
}
zend_string_release(name);
diff --git a/ext/reflection/tests/ReflectionParameter_ctor_cast.phpt b/ext/reflection/tests/ReflectionParameter_ctor_cast.phpt
new file mode 100644
index 0000000000..10f45647e6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionParameter_ctor_cast.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test method name string cast in ReflectionParameter ctor
+--FILE--
+<?php
+
+class A {}
+try {
+ new ReflectionParameter([
+ A::class,
+ new class { public function __toString() { return 'method'; } }
+ ], 'param');
+} catch (ReflectionException $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+Method A::method() does not exist