summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug79668.phpt16
-rw-r--r--Zend/zend_builtin_functions.c15
3 files changed, 21 insertions, 12 deletions
diff --git a/NEWS b/NEWS
index f301e3ac89..172c1d7333 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP NEWS
- Core:
. Fixed bug #79595 (zend_init_fpu() alters FPU precision). (cmb, Nikita)
. Fixed bug #79650 (php-win.exe 100% cpu lockup). (cmb)
+ . Fixed bug #79668 (get_defined_functions(true) may miss functions). (cmb,
+ Nikita)
- PDO SQLite:
. Fixed bug #79664 (PDOStatement::getColumnMeta fails on empty result set).
diff --git a/Zend/tests/bug79668.phpt b/Zend/tests/bug79668.phpt
new file mode 100644
index 0000000000..5e73a7469b
--- /dev/null
+++ b/Zend/tests/bug79668.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #79668 (get_defined_functions(true) may miss functions)
+--INI--
+disable_functions=sha1_file,password_hash
+--FILE--
+<?php
+$df = get_defined_functions(true);
+foreach (['sha1', 'sha1_file', 'hash', 'password_hash'] as $funcname) {
+ var_dump(in_array($funcname, $df['internal'], true));
+}
+?>
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
+bool(false)
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 5658ec1158..aeb837be92 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1810,7 +1810,6 @@ ZEND_FUNCTION(get_defined_functions)
zend_string *key;
zend_function *func;
zend_bool exclude_disabled = 0;
- char *disable_functions = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &exclude_disabled) == FAILURE) {
return;
@@ -1820,19 +1819,11 @@ ZEND_FUNCTION(get_defined_functions)
array_init(&user);
array_init(return_value);
- if (exclude_disabled) {
- disable_functions = INI_STR("disable_functions");
- }
ZEND_HASH_FOREACH_STR_KEY_PTR(EG(function_table), key, func) {
if (key && ZSTR_VAL(key)[0] != 0) {
- if (func->type == ZEND_INTERNAL_FUNCTION) {
- if (disable_functions != NULL) {
- if (strstr(disable_functions, func->common.function_name->val) == NULL) {
- add_next_index_str(&internal, zend_string_copy(key));
- }
- } else {
- add_next_index_str(&internal, zend_string_copy(key));
- }
+ if (func->type == ZEND_INTERNAL_FUNCTION
+ && (!exclude_disabled || func->internal_function.handler != ZEND_FN(display_disabled_function))) {
+ add_next_index_str(&internal, zend_string_copy(key));
} else if (func->type == ZEND_USER_FUNCTION) {
add_next_index_str(&user, zend_string_copy(key));
}