diff options
-rw-r--r-- | ext/reflection/php_reflection.c | 25 | ||||
-rw-r--r-- | ext/reflection/tests/ReflectionExtension_constructor_error.phpt | 30 | ||||
-rw-r--r-- | ext/reflection/tests/ReflectionProperty_error.phpt | 50 |
3 files changed, 71 insertions, 34 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index a01a0d67c5..6c96acb457 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4802,7 +4802,14 @@ ZEND_METHOD(reflection_property, __construct) zend_property_info *property_info = NULL; property_reference *reference; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "zs", &classname, &name_str, &name_len) == FAILURE) { + int rv; + zend_error_handling zeh; + + zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC); + rv = zend_parse_parameters(ZEND_NUM_ARGS(), "zs", &classname, &name_str, &name_len); + zend_restore_error_handling(&zeh TSRMLS_CC); + + if (rv == FAILURE) { return; } @@ -5197,9 +5204,15 @@ ZEND_METHOD(reflection_extension, __construct) zend_module_entry *module; char *name_str; size_t name_len; + int rv; + zend_error_handling zeh; ALLOCA_FLAG(use_heap) - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) { + zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC); + rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len); + zend_restore_error_handling(&zeh TSRMLS_CC); + + if (rv == FAILURE) { return; } @@ -5566,8 +5579,14 @@ ZEND_METHOD(reflection_zend_extension, __construct) zend_extension *extension; char *name_str; size_t name_len; + int rv; + zend_error_handling zeh; + + zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC); + rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len); + zend_restore_error_handling(&zeh TSRMLS_CC); - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) { + if (rv == FAILURE) { return; } diff --git a/ext/reflection/tests/ReflectionExtension_constructor_error.phpt b/ext/reflection/tests/ReflectionExtension_constructor_error.phpt index 9eae206c50..f731ab51cc 100644 --- a/ext/reflection/tests/ReflectionExtension_constructor_error.phpt +++ b/ext/reflection/tests/ReflectionExtension_constructor_error.phpt @@ -5,12 +5,32 @@ Gerrit "Remi" te Sligte <remi@wolerized.com> Leon Luijkx <leon@phpgg.nl> --FILE-- <?php -$obj = new ReflectionExtension(); -$test = $obj instanceof ReflectionExtension; -var_dump($test); +try { + $obj = new ReflectionExtension(); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} + +try { + $obj = new ReflectionExtension('foo', 'bar'); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} + +try { + $obj = new ReflectionExtension([]); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} + + ?> ==DONE== --EXPECTF-- -Warning: ReflectionExtension::__construct() expects exactly %d parameter, %d given in %s.php on line %d -bool(true) +Ok - ReflectionExtension::__construct() expects exactly %d parameter, %d given +Ok - ReflectionExtension::__construct() expects exactly %d parameter, %d given +Ok - ReflectionExtension::__construct() expects parameter 1 to be string, array given ==DONE== diff --git a/ext/reflection/tests/ReflectionProperty_error.phpt b/ext/reflection/tests/ReflectionProperty_error.phpt index 56de6e1f2e..d3910296b5 100644 --- a/ext/reflection/tests/ReflectionProperty_error.phpt +++ b/ext/reflection/tests/ReflectionProperty_error.phpt @@ -7,9 +7,27 @@ class C { public static $p; } -var_dump(new ReflectionProperty()); -var_dump(new ReflectionProperty('C::p')); -var_dump(new ReflectionProperty('C', 'p', 'x')); +try { + new ReflectionProperty(); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} +try { + new ReflectionProperty('C::p'); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} + +try { + new ReflectionProperty('C', 'p', 'x'); +} +catch(ReflectionException $re) { + echo "Ok - ".$re->getMessage().PHP_EOL; +} + + $rp = new ReflectionProperty('C', 'p'); var_dump($rp->getName(1)); var_dump($rp->isPrivate(1)); @@ -21,29 +39,9 @@ var_dump($rp->isDefault(1)); ?> --EXPECTF-- -Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 0 given in %s on line %d -object(ReflectionProperty)#%d (2) { - ["name"]=> - string(0) "" - ["class"]=> - string(0) "" -} - -Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 1 given in %s on line %d -object(ReflectionProperty)#%d (2) { - ["name"]=> - string(0) "" - ["class"]=> - string(0) "" -} - -Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 3 given in %s on line %d -object(ReflectionProperty)#%d (2) { - ["name"]=> - string(0) "" - ["class"]=> - string(0) "" -} +Ok - ReflectionProperty::__construct() expects exactly 2 parameters, 0 given +Ok - ReflectionProperty::__construct() expects exactly 2 parameters, 1 given +Ok - ReflectionProperty::__construct() expects exactly 2 parameters, 3 given Warning: ReflectionProperty::getName() expects exactly 0 parameters, 1 given in %s on line %d NULL |