mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'pull-request/1312' into PHP-7.0
* pull-request/1312: get_defined_functions extra parameter to exclude disabled functions news entry for PR #1312
This commit is contained in:
2
NEWS
2
NEWS
@@ -60,6 +60,8 @@ PHP NEWS
|
||||
. Fixed bug #70490 (get_browser function is very slow). (Nikita)
|
||||
. Fixed bug #73265 (Loading browscap.ini at startup causes high memory usage).
|
||||
(Nikita)
|
||||
. Fixed bug #31875 (get_defined_functions additional param to exclude
|
||||
disabled functions). (willianveiga)
|
||||
|
||||
- Zlib:
|
||||
. Fixed bug #73373 (deflate_add does not verify that output was not truncated).
|
||||
|
||||
@@ -1868,13 +1868,22 @@ static int copy_function_name(zval *zv, int num_args, va_list args, zend_hash_ke
|
||||
zend_function *func = Z_PTR_P(zv);
|
||||
zval *internal_ar = va_arg(args, zval *),
|
||||
*user_ar = va_arg(args, zval *);
|
||||
zend_bool *exclude_disabled = va_arg(args, zend_bool *);
|
||||
|
||||
if (hash_key->key == NULL || ZSTR_VAL(hash_key->key)[0] == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (func->type == ZEND_INTERNAL_FUNCTION) {
|
||||
add_next_index_str(internal_ar, zend_string_copy(hash_key->key));
|
||||
char *disable_functions = INI_STR("disable_functions");
|
||||
|
||||
if ((*exclude_disabled == 1) && (disable_functions != NULL)) {
|
||||
if (strstr(disable_functions, func->common.function_name->val) == NULL) {
|
||||
add_next_index_str(internal_ar, zend_string_copy(hash_key->key));
|
||||
}
|
||||
} else {
|
||||
add_next_index_str(internal_ar, zend_string_copy(hash_key->key));
|
||||
}
|
||||
} else if (func->type == ZEND_USER_FUNCTION) {
|
||||
add_next_index_str(user_ar, zend_string_copy(hash_key->key));
|
||||
}
|
||||
@@ -1888,8 +1897,9 @@ static int copy_function_name(zval *zv, int num_args, va_list args, zend_hash_ke
|
||||
ZEND_FUNCTION(get_defined_functions)
|
||||
{
|
||||
zval internal, user;
|
||||
zend_bool exclude_disabled = 0;
|
||||
|
||||
if (zend_parse_parameters_none() == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &exclude_disabled) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1897,7 +1907,7 @@ ZEND_FUNCTION(get_defined_functions)
|
||||
array_init(&user);
|
||||
array_init(return_value);
|
||||
|
||||
zend_hash_apply_with_arguments(EG(function_table), copy_function_name, 2, &internal, &user);
|
||||
zend_hash_apply_with_arguments(EG(function_table), copy_function_name, 3, &internal, &user, &exclude_disabled);
|
||||
|
||||
zend_hash_str_add_new(Z_ARRVAL_P(return_value), "internal", sizeof("internal")-1, &internal);
|
||||
zend_hash_str_add_new(Z_ARRVAL_P(return_value), "user", sizeof("user")-1, &user);
|
||||
|
||||
23
tests/basic/bug31875.phpt
Normal file
23
tests/basic/bug31875.phpt
Normal file
@@ -0,0 +1,23 @@
|
||||
--TEST--
|
||||
Bug #31875 get_defined_functions() should not list disabled functions
|
||||
--CREDITS--
|
||||
Willian Gustavo Veiga <contact@willianveiga.com>
|
||||
--INI--
|
||||
disable_functions=dl
|
||||
--FILE--
|
||||
<?php
|
||||
$disabled_function = 'dl';
|
||||
|
||||
$functions = get_defined_functions();
|
||||
var_dump(in_array($disabled_function, $functions['internal']));
|
||||
|
||||
$functions = get_defined_functions(false);
|
||||
var_dump(in_array($disabled_function, $functions['internal']));
|
||||
|
||||
$functions = get_defined_functions(true);
|
||||
var_dump(in_array($disabled_function, $functions['internal']));
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(false)
|
||||
Reference in New Issue
Block a user