From 2e5a747b59b24a44dd95c7b68c1072927123dc0b Mon Sep 17 00:00:00 2001 From: andrewnester Date: Mon, 15 May 2017 15:58:30 +0300 Subject: Fixed #74595 - ReflectionMethod::getParameters returns incorrect number of parameters --- ext/mysqli/mysqli_fe.c | 36 ++++++++++++++++++---- ext/mysqli/tests/bug74595.phpt | 25 +++++++++++++++ .../tests/mysqli_class_mysqli_reflection.phpt | 9 +++++- 3 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 ext/mysqli/tests/bug74595.phpt diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index e08ee6d614..59354e5096 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -261,6 +261,17 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_query, 0, 0, 2) MYSQLI_ZEND_ARG_OBJ_INFO_LINK() ZEND_ARG_INFO(0, query) + ZEND_ARG_INFO(0, resultmode) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_multi_query, 0, 0, 1) + MYSQLI_ZEND_ARG_OBJ_INFO_LINK() + ZEND_ARG_INFO(0, query) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_real_query, 0, 0, 1) + MYSQLI_ZEND_ARG_OBJ_INFO_LINK() + ZEND_ARG_INFO(0, query) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_prepare, 0, 0, 2) @@ -275,6 +286,19 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_query, 0, 0, 1) ZEND_ARG_INFO(0, query) + ZEND_ARG_INFO(0, resultmode) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_prepare, 0, 0, 1) + ZEND_ARG_INFO(0, query) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_multi_query, 0, 0, 1) + ZEND_ARG_INFO(0, query) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_real_query, 0, 0, 1) + ZEND_ARG_INFO(0, query) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_options, 0, 0, 3) @@ -442,7 +466,7 @@ const zend_function_entry mysqli_functions[] = { PHP_FE(mysqli_insert_id, arginfo_mysqli_only_link) PHP_FE(mysqli_kill, arginfo_mysqli_kill) PHP_FE(mysqli_more_results, arginfo_mysqli_only_link) - PHP_FE(mysqli_multi_query, arginfo_mysqli_query) + PHP_FE(mysqli_multi_query, arginfo_mysqli_multi_query) PHP_FE(mysqli_next_result, arginfo_mysqli_only_link) PHP_FE(mysqli_num_fields, arginfo_mysqli_only_result) PHP_FE(mysqli_num_rows, arginfo_mysqli_only_result) @@ -456,7 +480,7 @@ const zend_function_entry mysqli_functions[] = { PHP_FE(mysqli_query, arginfo_mysqli_query) PHP_FE(mysqli_real_connect, arginfo_mysqli_real_connect) PHP_FE(mysqli_real_escape_string, arginfo_mysqli_real_escape_string) - PHP_FE(mysqli_real_query, arginfo_mysqli_query) + PHP_FE(mysqli_real_query, arginfo_mysqli_real_query) #if defined(MYSQLI_USE_MYSQLND) PHP_FE(mysqli_reap_async_query, arginfo_mysqli_only_link) #endif @@ -542,7 +566,7 @@ const zend_function_entry mysqli_link_methods[] = { PHP_FALIAS(get_warnings, mysqli_get_warnings, arginfo_mysqli_no_params) PHP_FALIAS(init,mysqli_init_method, arginfo_mysqli_no_params) PHP_FALIAS(kill,mysqli_kill, arginfo_class_mysqli_kill) - PHP_FALIAS(multi_query, mysqli_multi_query, arginfo_class_mysqli_query) + PHP_FALIAS(multi_query, mysqli_multi_query, arginfo_class_mysqli_multi_query) PHP_FALIAS(__construct, mysqli_link_construct, arginfo_mysqli_connect) PHP_FALIAS(more_results, mysqli_more_results, arginfo_mysqli_no_params) PHP_FALIAS(next_result, mysqli_next_result, arginfo_mysqli_no_params) @@ -551,7 +575,7 @@ const zend_function_entry mysqli_link_methods[] = { #if defined(MYSQLI_USE_MYSQLND) ZEND_FENTRY(poll, ZEND_FN(mysqli_poll), arginfo_mysqli_poll, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) #endif - PHP_FALIAS(prepare, mysqli_prepare, arginfo_class_mysqli_query) + PHP_FALIAS(prepare, mysqli_prepare, arginfo_class_mysqli_prepare) PHP_FALIAS(query, mysqli_query, arginfo_class_mysqli_query) PHP_FALIAS(real_connect, mysqli_real_connect, arginfo_class_mysqli_real_connect) PHP_FALIAS(real_escape_string, mysqli_real_escape_string, arginfo_class_mysqli_real_escape_string) @@ -559,7 +583,7 @@ const zend_function_entry mysqli_link_methods[] = { PHP_FALIAS(reap_async_query, mysqli_reap_async_query, arginfo_mysqli_no_params) #endif PHP_FALIAS(escape_string, mysqli_real_escape_string, arginfo_class_mysqli_real_escape_string) - PHP_FALIAS(real_query, mysqli_real_query, arginfo_class_mysqli_query) + PHP_FALIAS(real_query, mysqli_real_query, arginfo_class_mysqli_real_query) PHP_FALIAS(release_savepoint, mysqli_release_savepoint, arginfo_class_mysqli_release_savepoint) PHP_FALIAS(rollback, mysqli_rollback, arginfo_class_mysqli_rollback) PHP_FALIAS(savepoint, mysqli_savepoint, arginfo_class_mysqli_savepoint) @@ -628,7 +652,7 @@ const zend_function_entry mysqli_stmt_methods[] = { PHP_FALIAS(send_long_data, mysqli_stmt_send_long_data, arginfo_class_mysqli_stmt_send_long_data) PHP_FALIAS(free_result, mysqli_stmt_free_result, arginfo_mysqli_no_params) PHP_FALIAS(reset, mysqli_stmt_reset, arginfo_mysqli_no_params) - PHP_FALIAS(prepare, mysqli_stmt_prepare, arginfo_class_mysqli_query) + PHP_FALIAS(prepare, mysqli_stmt_prepare, arginfo_class_mysqli_prepare) PHP_FALIAS(store_result, mysqli_stmt_store_result, arginfo_mysqli_no_params) #if defined(MYSQLI_USE_MYSQLND) PHP_FALIAS(get_result, mysqli_stmt_get_result, arginfo_mysqli_no_params) diff --git a/ext/mysqli/tests/bug74595.phpt b/ext/mysqli/tests/bug74595.phpt new file mode 100644 index 0000000000..9d017eaa82 --- /dev/null +++ b/ext/mysqli/tests/bug74595.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #74595 (ReflectionMethod::getParameters returns incorrect number of parameters) +--SKIPIF-- + +--FILE-- +getMethod('query'); +var_dump($method->getParameters()); +?> +--EXPECTF-- +array(2) { + [0]=> + object(ReflectionParameter)#%d (1) { + ["name"]=> + string(5) "query" + } + [1]=> + object(ReflectionParameter)#%d (1) { + ["name"]=> + string(10) "resultmode" + } +} diff --git a/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt b/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt index 22829ee6ee..f85d68932b 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt @@ -732,7 +732,7 @@ isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 -Number of Parameters: 1 +Number of Parameters: 2 Number of Required Parameters: 1 Inspecting parameter 'query' of method 'query' @@ -742,6 +742,13 @@ isPassedByReference: no isOptional: no isDefaultValueAvailable: no +Inspecting parameter 'resultmode' of method 'query' +isArray: no +allowsNull: no +isPassedByReference: no +isOptional: yes +isDefaultValueAvailable: no + Inspecting method 'real_connect' isFinal: no isAbstract: no -- cgit v1.2.1