From 580f6937ca3d8e3fd6d4d83229a17dcad57395a4 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 6 Mar 2018 13:44:40 +0100 Subject: Fix a variadic-functions-related crash Currently, we're not supporting virtual-patching on variadic functions. The commit makes it clear, and fix the related crash. This should close #157 --- src/sp_disabled_functions.c | 13 ++++++++++--- src/tests/config/config_disabled_functions_variadic.ini | 1 + src/tests/disabled_functions_variadic.phpt | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 src/tests/config/config_disabled_functions_variadic.ini create mode 100644 src/tests/disabled_functions_variadic.phpt (limited to 'src') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index e279e5f..0e05f4e 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -305,9 +305,16 @@ bool should_disable(zend_execute_data* execute_data, const char* builtin_name, /* Check if we filter on parameter value*/ if (config_node->param || config_node->r_param || (config_node->pos != -1)) { - if (false == is_param_matching(execute_data, config_node, builtin_name, - builtin_param, &arg_name, - builtin_param_name, &arg_value_str)) { + if (!builtin_name && execute_data->func->op_array.arg_info->is_variadic) { + sp_log_err( + "disable_function", + "Snuffleupagus doesn't support variadic functions yet, sorry. " + "Check https://github.com/nbs-system/snuffleupagus/issues/164 for " + "details."); + } else if (false == is_param_matching(execute_data, config_node, + builtin_name, builtin_param, + &arg_name, builtin_param_name, + &arg_value_str)) { goto next; } } diff --git a/src/tests/config/config_disabled_functions_variadic.ini b/src/tests/config/config_disabled_functions_variadic.ini new file mode 100644 index 0000000..cd1028d --- /dev/null +++ b/src/tests/config/config_disabled_functions_variadic.ini @@ -0,0 +1 @@ +sp.disable_function.function("foo").param("$b").value("1337").drop(); diff --git a/src/tests/disabled_functions_variadic.phpt b/src/tests/disabled_functions_variadic.phpt new file mode 100644 index 0000000..53b4630 --- /dev/null +++ b/src/tests/disabled_functions_variadic.phpt @@ -0,0 +1,17 @@ +--TEST-- +Disable functions - support for variadic functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_variadic.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][disable_function][error] Snuffleupagus doesn't support variadic functions yet, sorry. Check https://github.com/nbs-system/snuffleupagus/issues/164 for details. +[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/disabled_functions_variadic.php:2 has been disabled. -- cgit v1.3