From 5be9082f148ab546a0317a28ef5267bb797feb53 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 29 Nov 2020 19:37:49 +0100 Subject: Make the `>` operator skip over functions --- src/sp_disabled_functions.c | 8 +++--- .../config_disabled_functions_chain_call_skip.ini | 1 + .../disabled_functions_chain_call_skip.phpt | 29 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/tests/disable_function/config/config_disabled_functions_chain_call_skip.ini create mode 100644 src/tests/disable_function/disabled_functions_chain_call_skip.phpt (limited to 'src') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index 7be1c34..7e6ca6a 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -40,7 +40,7 @@ static bool is_functions_list_matching(zend_execute_data* execute_data, sp_list_node* functions_list) { zend_execute_data *orig_execute_data, *current; orig_execute_data = current = execute_data; - sp_list_node* it = functions_list; + sp_list_node const * it = functions_list; while (current) { if (it == NULL) { // every function in the list matched, we've got a match! @@ -50,7 +50,7 @@ static bool is_functions_list_matching(zend_execute_data* execute_data, EG(current_execute_data) = current; - char* complete_path_function = get_complete_function_path(current); + char* const complete_path_function = get_complete_function_path(current); if (!complete_path_function) { break; } @@ -59,10 +59,8 @@ static bool is_functions_list_matching(zend_execute_data* execute_data, if (0 == match) { it = it->next; - current = current->prev_execute_data; - } else { - break; } + current = current->prev_execute_data; } EG(current_execute_data) = orig_execute_data; diff --git a/src/tests/disable_function/config/config_disabled_functions_chain_call_skip.ini b/src/tests/disable_function/config/config_disabled_functions_chain_call_skip.ini new file mode 100644 index 0000000..4d2f68d --- /dev/null +++ b/src/tests/disable_function/config/config_disabled_functions_chain_call_skip.ini @@ -0,0 +1 @@ +sp.disable_function.function("a>c").simulation().drop(); diff --git a/src/tests/disable_function/disabled_functions_chain_call_skip.phpt b/src/tests/disable_function/disabled_functions_chain_call_skip.phpt new file mode 100644 index 0000000..9ff84b9 --- /dev/null +++ b/src/tests/disable_function/disabled_functions_chain_call_skip.phpt @@ -0,0 +1,29 @@ +--TEST-- +Disable functions by matching the calltrace, with a superfluous function in between +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_chain_call_skip.ini +--FILE-- + +--EXPECTF-- +I'm in the `a` function! +I'm in the `b` function! + +Warning: [snuffleupagus][0.0.0.0][disabled_function][simulation] Aborted execution on call of the function 'a>c' in %s/tests/disable_function/disabled_functions_chain_call_skip.php on line 12 +I'm in the `c` function! -- cgit v1.3