From: Marcus Boerger Date: Wed, 4 Aug 2004 22:47:56 +0000 (+0000) Subject: - Fix bug #29523 (ReflectionParameter::isOptional() is incorrect) X-Git-Tag: PRE_ZEND_VM_DISPATCH_PATCH~235 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=90e4fd0a0a0881d3a21fbd6da08a191968aae124;p=php - Fix bug #29523 (ReflectionParameter::isOptional() is incorrect) --- diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index fe8706ebcb..a7f9d2c144 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -833,7 +833,7 @@ static void reflection_extension_factory(zval *object, char *name_str TSRMLS_DC) /* }}} */ /* {{{ reflection_parameter_factory */ -static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, zval *object TSRMLS_DC) +static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, int required, zval *object TSRMLS_DC) { reflection_object *intern; parameter_reference *reference; @@ -850,6 +850,7 @@ static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int of reference = (parameter_reference*) emalloc(sizeof(parameter_reference)); reference->arg_info = arg_info; reference->offset = offset; + reference->required = required; intern->ptr = reference; intern->free_ptr = 1; zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); @@ -1413,7 +1414,7 @@ ZEND_METHOD(reflection_function, getParameters) zval *parameter; ALLOC_ZVAL(parameter); - reflection_parameter_factory(arg_info, i, parameter TSRMLS_CC); + reflection_parameter_factory(arg_info, i, fptr->common.required_num_args, parameter TSRMLS_CC); add_next_index_zval(return_value, parameter); arg_info++; diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index fe8706ebcb..a7f9d2c144 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -833,7 +833,7 @@ static void reflection_extension_factory(zval *object, char *name_str TSRMLS_DC) /* }}} */ /* {{{ reflection_parameter_factory */ -static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, zval *object TSRMLS_DC) +static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, int required, zval *object TSRMLS_DC) { reflection_object *intern; parameter_reference *reference; @@ -850,6 +850,7 @@ static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int of reference = (parameter_reference*) emalloc(sizeof(parameter_reference)); reference->arg_info = arg_info; reference->offset = offset; + reference->required = required; intern->ptr = reference; intern->free_ptr = 1; zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); @@ -1413,7 +1414,7 @@ ZEND_METHOD(reflection_function, getParameters) zval *parameter; ALLOC_ZVAL(parameter); - reflection_parameter_factory(arg_info, i, parameter TSRMLS_CC); + reflection_parameter_factory(arg_info, i, fptr->common.required_num_args, parameter TSRMLS_CC); add_next_index_zval(return_value, parameter); arg_info++; diff --git a/ext/reflection/tests/bug29523.phpt b/ext/reflection/tests/bug29523.phpt new file mode 100755 index 0000000000..01c83c2a15 --- /dev/null +++ b/ext/reflection/tests/bug29523.phpt @@ -0,0 +1,38 @@ +--TEST-- +Bug #29523 (ReflectionParameter::isOptional() is incorrect) +--FILE-- +getParameters() as $parameter) +{ + var_dump($parameter->isOptional()); + if ($parameter->isOptional()) + { + ++$numberOfOptionalParameters; + } + else + { + ++$numberOfNotOptionalParameters; + } +} +var_dump($function->getNumberOfRequiredParameters()); +var_dump($numberOfNotOptionalParameters); + +?> +--EXPECT-- +bool(false) +bool(false) +bool(true) +int(2) +int(2)