summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjvoisin2018-03-06 13:44:40 +0100
committerjvoisin2018-03-06 13:44:40 +0100
commit580f6937ca3d8e3fd6d4d83229a17dcad57395a4 (patch)
treea0d9be2e7b169f4db201b6e0049eeaa2846bcfc0 /src
parent604761cdc0c2228c48ef394158ee24c3f61bfd3f (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.c13
-rw-r--r--src/tests/config/config_disabled_functions_variadic.ini1
-rw-r--r--src/tests/disabled_functions_variadic.phpt17
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--
2Disable functions - support for variadic functions
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_variadic.ini
7--FILE--
8<?php
9function foo(...$b) {
10 return count($b);
11}
12
13echo 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.