diff options
| author | jvoisin | 2018-03-06 13:44:40 +0100 |
|---|---|---|
| committer | jvoisin | 2018-03-06 13:44:40 +0100 |
| commit | 580f6937ca3d8e3fd6d4d83229a17dcad57395a4 (patch) | |
| tree | a0d9be2e7b169f4db201b6e0049eeaa2846bcfc0 /src | |
| parent | 604761cdc0c2228c48ef394158ee24c3f61bfd3f (diff) | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/sp_disabled_functions.c | 13 | ||||
| -rw-r--r-- | src/tests/config/config_disabled_functions_variadic.ini | 1 | ||||
| -rw-r--r-- | src/tests/disabled_functions_variadic.phpt | 17 |
3 files changed, 28 insertions, 3 deletions
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, | |||
| 305 | /* Check if we filter on parameter value*/ | 305 | /* Check if we filter on parameter value*/ |
| 306 | if (config_node->param || config_node->r_param || | 306 | if (config_node->param || config_node->r_param || |
| 307 | (config_node->pos != -1)) { | 307 | (config_node->pos != -1)) { |
| 308 | if (false == is_param_matching(execute_data, config_node, builtin_name, | 308 | if (!builtin_name && execute_data->func->op_array.arg_info->is_variadic) { |
| 309 | builtin_param, &arg_name, | 309 | sp_log_err( |
| 310 | builtin_param_name, &arg_value_str)) { | 310 | "disable_function", |
| 311 | "Snuffleupagus doesn't support variadic functions yet, sorry. " | ||
| 312 | "Check https://github.com/nbs-system/snuffleupagus/issues/164 for " | ||
| 313 | "details."); | ||
| 314 | } else if (false == is_param_matching(execute_data, config_node, | ||
| 315 | builtin_name, builtin_param, | ||
| 316 | &arg_name, builtin_param_name, | ||
| 317 | &arg_value_str)) { | ||
| 311 | goto next; | 318 | goto next; |
| 312 | } | 319 | } |
| 313 | } | 320 | } |
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 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - support for variadic functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_variadic.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | function foo(...$b) { | ||
| 10 | return count($b); | ||
| 11 | } | ||
| 12 | |||
| 13 | echo foo(5, 4, 3, 2, 1); | ||
| 14 | ?> | ||
| 15 | --EXPECTF-- | ||
| 16 | [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. | ||
| 17 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/disabled_functions_variadic.php:2 has been disabled. | ||
