summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorxXx-caillou-xXx2017-12-20 18:09:53 +0100
committerjvoisin2017-12-20 18:09:53 +0100
commite7f541396715ee2895abcf73044b91ae9b746201 (patch)
treeba0e9765e7f14f04b92585df1f3fcd1830ab4b00 /src/tests
parent8d6cc4f2b63c3f0dc31fe6cecd34ac023ea1cccb (diff)
Better parsing of the rules
Thanks to this huge commit from @xXx-caillou-xXx, we can now write amazingly flexible rules.
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/broken_conf_key_value.phpt9
-rw-r--r--src/tests/broken_conf_local_var_1.phpt10
-rw-r--r--src/tests/broken_conf_local_var_10.phpt10
-rw-r--r--src/tests/broken_conf_local_var_11.phpt10
-rw-r--r--src/tests/broken_conf_local_var_12.phpt9
-rw-r--r--src/tests/broken_conf_local_var_13.phpt10
-rw-r--r--src/tests/broken_conf_local_var_14.phpt10
-rw-r--r--src/tests/broken_conf_local_var_2.phpt10
-rw-r--r--src/tests/broken_conf_local_var_3.phpt10
-rw-r--r--src/tests/broken_conf_local_var_4.phpt10
-rw-r--r--src/tests/broken_conf_local_var_5.phpt10
-rw-r--r--src/tests/broken_conf_local_var_6.phpt10
-rw-r--r--src/tests/broken_conf_local_var_7.phpt10
-rw-r--r--src/tests/broken_conf_local_var_8.phpt10
-rw-r--r--src/tests/broken_conf_local_var_9.phpt10
-rw-r--r--src/tests/config/broken_conf_key_value.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_1.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_10.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_11.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_12.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_13.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_14.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_2.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_3.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_4.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_5.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_6.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_7.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_8.ini1
-rw-r--r--src/tests/config/broken_conf_local_var_9.ini1
-rw-r--r--src/tests/config/config_disabled_functions_local_var_array.ini1
-rw-r--r--src/tests/config/config_disabled_functions_local_var_array_key.ini1
-rw-r--r--src/tests/config/config_disabled_functions_name_type.ini2
-rw-r--r--src/tests/config/config_disabled_functions_nul_byte.ini2
-rw-r--r--src/tests/config/config_disabled_functions_param.ini12
-rw-r--r--src/tests/config/config_disabled_functions_param_allow.ini4
-rw-r--r--src/tests/config/config_disabled_functions_param_array.ini11
-rw-r--r--src/tests/config/config_disabled_functions_param_int.ini4
-rw-r--r--src/tests/config/config_disabled_functions_param_r_array.ini2
-rw-r--r--src/tests/config/config_disabled_functions_param_runtime.ini2
-rw-r--r--src/tests/config/disabled_function_local_var.ini12
-rw-r--r--src/tests/config/disabled_function_local_var_2.ini1
-rw-r--r--src/tests/config/disabled_function_local_var_obj.ini3
-rw-r--r--src/tests/config/disabled_function_super_global_var.ini2
-rw-r--r--src/tests/config/disabled_functions_pos.ini1
-rw-r--r--src/tests/disabled_function_local_var_10.phpt44
-rw-r--r--src/tests/disabled_function_local_var_2.phpt46
-rw-r--r--src/tests/disabled_function_local_var_3.phpt45
-rw-r--r--src/tests/disabled_function_local_var_4.phpt56
-rw-r--r--src/tests/disabled_function_local_var_5.phpt33
-rw-r--r--src/tests/disabled_function_local_var_6.phpt31
-rw-r--r--src/tests/disabled_function_local_var_7.phpt31
-rw-r--r--src/tests/disabled_function_local_var_8.phpt20
-rw-r--r--src/tests/disabled_function_local_var_9.phpt20
-rw-r--r--src/tests/disabled_function_local_var_obj.phpt25
-rw-r--r--src/tests/disabled_functions_local_var_array.phpt20
-rw-r--r--src/tests/disabled_functions_local_var_array_key.phpt20
-rw-r--r--src/tests/disabled_functions_name_type.phpt2
-rw-r--r--src/tests/disabled_functions_nul_byte.phpt2
-rw-r--r--src/tests/disabled_functions_param.phpt2
-rw-r--r--src/tests/disabled_functions_param_array.phpt2
-rw-r--r--src/tests/disabled_functions_param_array_deref.phpt2
-rw-r--r--src/tests/disabled_functions_param_array_no_value.phpt2
-rw-r--r--src/tests/disabled_functions_param_array_r.phpt20
-rw-r--r--src/tests/disabled_functions_param_array_r_keys.phpt20
-rw-r--r--src/tests/disabled_functions_param_array_several_levels.phpt2
-rw-r--r--src/tests/disabled_functions_param_array_several_levels_int.phpt20
-rw-r--r--src/tests/disabled_functions_param_array_several_levels_keys.phpt20
-rw-r--r--src/tests/disabled_functions_param_array_several_levels_keys_int.phpt20
-rw-r--r--src/tests/disabled_functions_param_int.phpt2
-rw-r--r--src/tests/disabled_functions_pos_type.phpt14
-rw-r--r--src/tests/disabled_functions_runtime.phpt2
72 files changed, 717 insertions, 29 deletions
diff --git a/src/tests/broken_conf_key_value.phpt b/src/tests/broken_conf_key_value.phpt
new file mode 100644
index 0000000..e9ee4a9
--- /dev/null
+++ b/src/tests/broken_conf_key_value.phpt
@@ -0,0 +1,9 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_key_value.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").var("").value("").key("").drop();':`key` and `value` are mutually exclusive on line 1.
diff --git a/src/tests/broken_conf_local_var_1.phpt b/src/tests/broken_conf_local_var_1.phpt
new file mode 100644
index 0000000..a91d275
--- /dev/null
+++ b/src/tests/broken_conf_local_var_1.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_1.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `]` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value ']' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_10.phpt b/src/tests/broken_conf_local_var_10.phpt
new file mode 100644
index 0000000..8a7d9b9
--- /dev/null
+++ b/src/tests/broken_conf_local_var_10.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_10.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `]` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd[asd]asd' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_11.phpt b/src/tests/broken_conf_local_var_11.phpt
new file mode 100644
index 0000000..1817a3f
--- /dev/null
+++ b/src/tests/broken_conf_local_var_11.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_11.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `::` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd::' for `param` on line 1.
diff --git a/src/tests/broken_conf_local_var_12.phpt b/src/tests/broken_conf_local_var_12.phpt
new file mode 100644
index 0000000..0b52e2a
--- /dev/null
+++ b/src/tests/broken_conf_local_var_12.phpt
@@ -0,0 +1,9 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_12.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Empty value in `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_13.phpt b/src/tests/broken_conf_local_var_13.phpt
new file mode 100644
index 0000000..ca6be6d
--- /dev/null
+++ b/src/tests/broken_conf_local_var_13.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_13.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `->` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd->asd' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_14.phpt b/src/tests/broken_conf_local_var_14.phpt
new file mode 100644
index 0000000..cb7e455
--- /dev/null
+++ b/src/tests/broken_conf_local_var_14.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_14.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid var name: $i+valid var name .
10[snuffleupagus][0.0.0.0][config][error] Invalid value '$i+valid var name ' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_2.phpt b/src/tests/broken_conf_local_var_2.phpt
new file mode 100644
index 0000000..b67a492
--- /dev/null
+++ b/src/tests/broken_conf_local_var_2.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_2.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `"` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value '""asd' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_3.phpt b/src/tests/broken_conf_local_var_3.phpt
new file mode 100644
index 0000000..639d2ea
--- /dev/null
+++ b/src/tests/broken_conf_local_var_3.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_3.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `->` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value '$qwe->::' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_4.phpt b/src/tests/broken_conf_local_var_4.phpt
new file mode 100644
index 0000000..e50f9a6
--- /dev/null
+++ b/src/tests/broken_conf_local_var_4.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_4.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `"` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value '"asd"asd[]' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_5.phpt b/src/tests/broken_conf_local_var_5.phpt
new file mode 100644
index 0000000..0c0d59a
--- /dev/null
+++ b/src/tests/broken_conf_local_var_5.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_5.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `'` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value ''asd'asd[]' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_6.phpt b/src/tests/broken_conf_local_var_6.phpt
new file mode 100644
index 0000000..c51de24
--- /dev/null
+++ b/src/tests/broken_conf_local_var_6.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_6.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `'` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value '''asd' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_7.phpt b/src/tests/broken_conf_local_var_7.phpt
new file mode 100644
index 0000000..d3a0fa4
--- /dev/null
+++ b/src/tests/broken_conf_local_var_7.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_7.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `->` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd-->' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_8.phpt b/src/tests/broken_conf_local_var_8.phpt
new file mode 100644
index 0000000..749a1aa
--- /dev/null
+++ b/src/tests/broken_conf_local_var_8.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_8.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `]` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd[asd]"asd"' for `var` on line 1.
diff --git a/src/tests/broken_conf_local_var_9.phpt b/src/tests/broken_conf_local_var_9.phpt
new file mode 100644
index 0000000..6f706db
--- /dev/null
+++ b/src/tests/broken_conf_local_var_9.phpt
@@ -0,0 +1,10 @@
1--TEST--
2Broken configuration
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/broken_conf_local_var_9.ini
7--FILE--
8--EXPECT--
9[snuffleupagus][0.0.0.0][config][error] Invalid `]` position.
10[snuffleupagus][0.0.0.0][config][error] Invalid value 'asd[asd]'asd'' for `var` on line 1.
diff --git a/src/tests/config/broken_conf_key_value.ini b/src/tests/config/broken_conf_key_value.ini
new file mode 100644
index 0000000..a0edaf2
--- /dev/null
+++ b/src/tests/config/broken_conf_key_value.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("").value("").key("").drop();
diff --git a/src/tests/config/broken_conf_local_var_1.ini b/src/tests/config/broken_conf_local_var_1.ini
new file mode 100644
index 0000000..ae5165c
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_1.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("]").drop();
diff --git a/src/tests/config/broken_conf_local_var_10.ini b/src/tests/config/broken_conf_local_var_10.ini
new file mode 100644
index 0000000..93dd07f
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_10.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("asd[asd]asd").drop();
diff --git a/src/tests/config/broken_conf_local_var_11.ini b/src/tests/config/broken_conf_local_var_11.ini
new file mode 100644
index 0000000..028b1bd
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_11.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").param("asd::").drop();
diff --git a/src/tests/config/broken_conf_local_var_12.ini b/src/tests/config/broken_conf_local_var_12.ini
new file mode 100644
index 0000000..a151960
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_12.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("").drop();
diff --git a/src/tests/config/broken_conf_local_var_13.ini b/src/tests/config/broken_conf_local_var_13.ini
new file mode 100644
index 0000000..e7c9778
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_13.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("asd->asd").drop();
diff --git a/src/tests/config/broken_conf_local_var_14.ini b/src/tests/config/broken_conf_local_var_14.ini
new file mode 100644
index 0000000..6c98ec3
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_14.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("$i+valid var name ").drop();
diff --git a/src/tests/config/broken_conf_local_var_2.ini b/src/tests/config/broken_conf_local_var_2.ini
new file mode 100644
index 0000000..145a3b5
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_2.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("\"\"asd").drop();
diff --git a/src/tests/config/broken_conf_local_var_3.ini b/src/tests/config/broken_conf_local_var_3.ini
new file mode 100644
index 0000000..5d89076
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_3.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("\$qwe->::").drop();
diff --git a/src/tests/config/broken_conf_local_var_4.ini b/src/tests/config/broken_conf_local_var_4.ini
new file mode 100644
index 0000000..3ec073b
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_4.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("\"asd\"asd[]").drop();
diff --git a/src/tests/config/broken_conf_local_var_5.ini b/src/tests/config/broken_conf_local_var_5.ini
new file mode 100644
index 0000000..cd350b6
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_5.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("'asd'asd[]").drop();
diff --git a/src/tests/config/broken_conf_local_var_6.ini b/src/tests/config/broken_conf_local_var_6.ini
new file mode 100644
index 0000000..02f4f1a
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_6.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("''asd").drop();
diff --git a/src/tests/config/broken_conf_local_var_7.ini b/src/tests/config/broken_conf_local_var_7.ini
new file mode 100644
index 0000000..abbd223
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_7.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("asd-->").drop();
diff --git a/src/tests/config/broken_conf_local_var_8.ini b/src/tests/config/broken_conf_local_var_8.ini
new file mode 100644
index 0000000..fd18487
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_8.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("asd[asd]\"asd\"").drop();
diff --git a/src/tests/config/broken_conf_local_var_9.ini b/src/tests/config/broken_conf_local_var_9.ini
new file mode 100644
index 0000000..a311b86
--- /dev/null
+++ b/src/tests/config/broken_conf_local_var_9.ini
@@ -0,0 +1 @@
sp.disable_function.function("system").var("asd[asd]\'asd\'").drop();
diff --git a/src/tests/config/config_disabled_functions_local_var_array.ini b/src/tests/config/config_disabled_functions_local_var_array.ini
new file mode 100644
index 0000000..15dd5a1
--- /dev/null
+++ b/src/tests/config/config_disabled_functions_local_var_array.ini
@@ -0,0 +1 @@
sp.disable_function.function("foo").var("$a[test2][foo]").value("aaa").drop();
diff --git a/src/tests/config/config_disabled_functions_local_var_array_key.ini b/src/tests/config/config_disabled_functions_local_var_array_key.ini
new file mode 100644
index 0000000..75c840d
--- /dev/null
+++ b/src/tests/config/config_disabled_functions_local_var_array_key.ini
@@ -0,0 +1 @@
sp.disable_function.function("foo").var("$a[test2][foo]").key("aaa").drop();
diff --git a/src/tests/config/config_disabled_functions_name_type.ini b/src/tests/config/config_disabled_functions_name_type.ini
index 25bdf98..c25b92c 100644
--- a/src/tests/config/config_disabled_functions_name_type.ini
+++ b/src/tests/config/config_disabled_functions_name_type.ini
@@ -1 +1 @@
sp.disable_function.function_r("^strcmp$").param("str1").param_type("array").drop(); sp.disable_function.function_r("^strcmp$").param("$str1").param_type("array").drop();
diff --git a/src/tests/config/config_disabled_functions_nul_byte.ini b/src/tests/config/config_disabled_functions_nul_byte.ini
index d5eb847..e664cba 100644
--- a/src/tests/config/config_disabled_functions_nul_byte.ini
+++ b/src/tests/config/config_disabled_functions_nul_byte.ini
@@ -1 +1 @@
sp.disable_function.function("system").param("command").value_r("id").drop(); \ No newline at end of file sp.disable_function.function("system").param("$command").value_r("id").drop();
diff --git a/src/tests/config/config_disabled_functions_param.ini b/src/tests/config/config_disabled_functions_param.ini
index 87f1b3c..dc1c949 100644
--- a/src/tests/config/config_disabled_functions_param.ini
+++ b/src/tests/config/config_disabled_functions_param.ini
@@ -1,6 +1,6 @@
1sp.disable_function.function("system").param("command").value_r("^id$").alias("1").drop(); 1sp.disable_function.function("system").param("$command").value_r("^id$").alias("1").drop();
2sp.disable_function.function("array_sum").param("array").value_r("^8$").alias("2").drop(); 2sp.disable_function.function("array_sum").param("$array").value_r("^8$").alias("2").drop();
3sp.disable_function.function("shell_exec").param("cmd").value("id").alias("3").drop(); 3sp.disable_function.function("shell_exec").param("$cmd").value("id").alias("3").drop();
4sp.disable_function.function("shell_exec").param("cmd").value("bla").alias("4").drop(); 4sp.disable_function.function("shell_exec").param("$cmd").value("bla").alias("4").drop();
5sp.disable_function.function("strcmp").param("str1").value("bla").alias("5").drop().simulation(); 5sp.disable_function.function("strcmp").param("$str1").value("bla").alias("5").drop().simulation();
6sp.disable_function.function("strncmp").param("str1").value("bla").drop().simulation(); 6sp.disable_function.function("strncmp").param("$str1").value("bla").drop().simulation();
diff --git a/src/tests/config/config_disabled_functions_param_allow.ini b/src/tests/config/config_disabled_functions_param_allow.ini
index 8e139e4..27d919a 100644
--- a/src/tests/config/config_disabled_functions_param_allow.ini
+++ b/src/tests/config/config_disabled_functions_param_allow.ini
@@ -1,3 +1,3 @@
1sp.disable_function.function("system").param("command").value("echo win").filename("/test.php").drop(); 1sp.disable_function.function("system").param("$command").value("echo win").filename("/test.php").drop();
2sp.disable_function.function("system").param("command").value("echo win").allow(); 2sp.disable_function.function("system").param("$command").value("echo win").allow();
3sp.disable_function.function("system").drop(); 3sp.disable_function.function("system").drop();
diff --git a/src/tests/config/config_disabled_functions_param_array.ini b/src/tests/config/config_disabled_functions_param_array.ini
index 0589ad8..6fe0615 100644
--- a/src/tests/config/config_disabled_functions_param_array.ini
+++ b/src/tests/config/config_disabled_functions_param_array.ini
@@ -1,4 +1,7 @@
1sp.disable_function.function("foo").param("arr").value("abcd").alias("1").drop(); 1sp.disable_function.function("foo").param("$arr[a]").value("abcd").alias("1").drop();
2sp.disable_function.function("foo").param("arr[bla]").value("abcdef").alias("2").drop(); 2sp.disable_function.function("foo").param("$arr[bla]").value("abcdef").alias("2").drop();
3sp.disable_function.function("foo").param("arr[test]").alias("3").drop(); 3sp.disable_function.function("foo").param("$arr[test]").alias("3").drop();
4sp.disable_function.function("foo").param("arr[test2][foo][lol]").value("aaa").alias("4").drop(); 4sp.disable_function.function("foo").param("$arr[test2][foo]").value("aaa").alias("4").drop();
5sp.disable_function.function("foo").param("$arr[test2][bar]").key("lol").alias("5").drop();
6sp.disable_function.function("foo").param("$arr[test2][bar]").key("123").alias("6").drop();
7sp.disable_function.function("foo").param("$qwe[a]").value("abcd").alias("7").drop();
diff --git a/src/tests/config/config_disabled_functions_param_int.ini b/src/tests/config/config_disabled_functions_param_int.ini
index 1c93c2f..2a7d962 100644
--- a/src/tests/config/config_disabled_functions_param_int.ini
+++ b/src/tests/config/config_disabled_functions_param_int.ini
@@ -1,2 +1,2 @@
1sp.disable_function.function("foobar").param("id").value("42").drop(); 1sp.disable_function.function("foobar").param("$id").value("42").drop();
2sp.disable_function.function("foobar").param("id").value_r("^1337").drop(); 2sp.disable_function.function("foobar").param("$id").value_r("^1337").drop();
diff --git a/src/tests/config/config_disabled_functions_param_r_array.ini b/src/tests/config/config_disabled_functions_param_r_array.ini
new file mode 100644
index 0000000..fcac71d
--- /dev/null
+++ b/src/tests/config/config_disabled_functions_param_r_array.ini
@@ -0,0 +1,2 @@
1sp.disable_function.function("foo").param_r("arr").value("abcd").alias("1").drop();
2sp.disable_function.function("foo").param_r("arr").key_r("abc").alias("2").drop();
diff --git a/src/tests/config/config_disabled_functions_param_runtime.ini b/src/tests/config/config_disabled_functions_param_runtime.ini
index e7a011f..e9d44a2 100644
--- a/src/tests/config/config_disabled_functions_param_runtime.ini
+++ b/src/tests/config/config_disabled_functions_param_runtime.ini
@@ -1 +1 @@
sp.disable_function.function("test").param("param").value_r("1337").drop(); sp.disable_function.function("test").param("$param").value_r("1337").drop();
diff --git a/src/tests/config/disabled_function_local_var.ini b/src/tests/config/disabled_function_local_var.ini
index cba2ae3..3d553c0 100644
--- a/src/tests/config/disabled_function_local_var.ini
+++ b/src/tests/config/disabled_function_local_var.ini
@@ -1,2 +1,10 @@
1sp.disable_function.function("phpinfo").var("b").value("1337").drop(); 1sp.disable_function.function("phpinfo").var("$b").value("1337").drop();
2sp.disable_function.function("strlen").var("a").value("1337").drop(); 2sp.disable_function.function("strlen").var("$a").value("1337").drop();
3sp.disable_function.function("strlen").var("$a['123']").value("block").drop();
4sp.disable_function.function("strlen").var("$a[$c]->prop").value("block").drop();
5sp.disable_function.function("strlen").var("$a->zxc").value("not a good value").drop();
6sp.disable_function.function("strlen").var("\\asd\\test_object::TEST_VALUE['constant']").value("no good").drop();
7sp.disable_function.function("strlen").var("\\asd\\test_object::TEST_VALUE").value("qwerty").drop();
8sp.disable_function.function("strlen").var("\\qwe\\ASD").value("qwerty").drop();
9sp.disable_function.function("strlen").var("\\qwe\\QWE['123']").value("asdfgh").drop();
10sp.disable_function.function("strlen").var("$qwe").value("block this").drop();
diff --git a/src/tests/config/disabled_function_local_var_2.ini b/src/tests/config/disabled_function_local_var_2.ini
new file mode 100644
index 0000000..e3e9ae6
--- /dev/null
+++ b/src/tests/config/disabled_function_local_var_2.ini
@@ -0,0 +1 @@
sp.disable_function.function("strlen").var("$b['_GET[obj->nop]'][$b[456][$d->$idk->qwe[\\qwe\\UNE_CONSTANTE]]][$a]->uio").value("valeur de apres").drop();
diff --git a/src/tests/config/disabled_function_local_var_obj.ini b/src/tests/config/disabled_function_local_var_obj.ini
new file mode 100644
index 0000000..df6b617
--- /dev/null
+++ b/src/tests/config/disabled_function_local_var_obj.ini
@@ -0,0 +1,3 @@
1sp.disable_function.function("strlen").var("$test->$test_array").value("value").drop();
2sp.disable_function.function("strlen").var("$arg->$test_array").value("value").drop();
3sp.disable_function.function("strlen").var("$test->$arg").value("nop_object").drop();
diff --git a/src/tests/config/disabled_function_super_global_var.ini b/src/tests/config/disabled_function_super_global_var.ini
index feac314..178a01a 100644
--- a/src/tests/config/disabled_function_super_global_var.ini
+++ b/src/tests/config/disabled_function_super_global_var.ini
@@ -1 +1 @@
sp.disable_function.function("strlen").var("_GET[bla]").value("test2").drop(); sp.disable_function.function("strlen").var("$_GET[bla]").value("test2").drop();
diff --git a/src/tests/config/disabled_functions_pos.ini b/src/tests/config/disabled_functions_pos.ini
index e7d12a9..2b4650d 100644
--- a/src/tests/config/disabled_functions_pos.ini
+++ b/src/tests/config/disabled_functions_pos.ini
@@ -1,2 +1,3 @@
1sp.disable_function.function("system").pos("1337").value("id").drop(); 1sp.disable_function.function("system").pos("1337").value("id").drop();
2sp.disable_function.function("system").pos("0").value("id").drop(); 2sp.disable_function.function("system").pos("0").value("id").drop();
3sp.disable_function.function("system").pos("1").param_type("ARRAY").alias("1").drop();
diff --git a/src/tests/disabled_function_local_var_10.phpt b/src/tests/disabled_function_local_var_10.phpt
new file mode 100644
index 0000000..538d693
--- /dev/null
+++ b/src/tests/disabled_function_local_var_10.phpt
@@ -0,0 +1,44 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9$qwe = Array('123' => Array('qwe'), '456' => Array('no block this'));
10var_dump($qwe);
11strlen("qwe");
12$qwe = Array('123' => Array('qwe'), '456' => Array(Array('block this')));
13var_dump($qwe);
14strlen("qwe");
15?>
16--EXPECTF--
17array(2) {
18 [123]=>
19 array(1) {
20 [0]=>
21 string(3) "qwe"
22 }
23 [456]=>
24 array(1) {
25 [0]=>
26 string(13) "no block this"
27 }
28}
29array(2) {
30 [123]=>
31 array(1) {
32 [0]=>
33 string(3) "qwe"
34 }
35 [456]=>
36 array(1) {
37 [0]=>
38 array(1) {
39 [0]=>
40 string(10) "block this"
41 }
42 }
43}
44[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_10.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_2.phpt b/src/tests/disabled_function_local_var_2.phpt
new file mode 100644
index 0000000..da0a3d2
--- /dev/null
+++ b/src/tests/disabled_function_local_var_2.phpt
@@ -0,0 +1,46 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9$a = 1338;
10function test(){
11 echo strlen("id") . "\n";
12}
13echo "Value of a: $a\n";
14test();
15
16$a = Array();
17$a['qwe'] = 'block';
18$a['123'] = 'nop';
19echo "Value of a:\n";
20var_dump($a);
21test();
22
23$a['123'] = 'block';
24echo "Value of a:\n";
25var_dump($a);
26test();
27?>
28--EXPECTF--
29Value of a: 1338
302
31Value of a:
32array(2) {
33 ["qwe"]=>
34 string(5) "block"
35 [123]=>
36 string(3) "nop"
37}
382
39Value of a:
40array(2) {
41 ["qwe"]=>
42 string(5) "block"
43 [123]=>
44 string(5) "block"
45}
46[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_2.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_3.phpt b/src/tests/disabled_function_local_var_3.phpt
new file mode 100644
index 0000000..d26b636
--- /dev/null
+++ b/src/tests/disabled_function_local_var_3.phpt
@@ -0,0 +1,45 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9function test(){
10 echo strlen("id") . "\n";
11}
12
13$a = Array();
14$c = '123';
15$a['qwe'] = 'qwe';
16$a['123'] = 'nop';
17echo "Value of a:\n";
18var_dump($a);
19test();
20
21$a[$c] = (Object)['prop' => 'block'];
22echo "Value of a:\n";
23var_dump($a);
24test();
25?>
26--EXPECTF--
27Value of a:
28array(2) {
29 ["qwe"]=>
30 string(3) "qwe"
31 [123]=>
32 string(3) "nop"
33}
342
35Value of a:
36array(2) {
37 ["qwe"]=>
38 string(3) "qwe"
39 [123]=>
40 object(stdClass)#1 (1) {
41 ["prop"]=>
42 string(5) "block"
43 }
44}
45[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_3.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_4.phpt b/src/tests/disabled_function_local_var_4.phpt
new file mode 100644
index 0000000..ae8d713
--- /dev/null
+++ b/src/tests/disabled_function_local_var_4.phpt
@@ -0,0 +1,56 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var_2.ini
7--FILE--
8<?php
9namespace qwe {
10 const UNE_CONSTANTE = 'constant';
11}
12namespace asd {
13$b = Array();
14$b['_GET[obj->nop]'] = Array();
15$b['_GET[obj->nop]']["qwe"] = Array();
16$b[456] = Array();
17$b[456]['zxc'] = "qwe";
18$b[456]['nop'] = "nop";
19$b['_GET[obj->nop]']["qwe"][321] = "Yeay";
20$b["123"] = "qwe";
21$b["123a"] = "foo";
22$b["asd"] = "zxc";
23$b['_GET[obj->nop]']["qwe"][1337] = (Object)(['uio' => "valeur de apres"]);
24$b['_GET[obj->nop]']["qwe"][1338] = (Object)(['uio' => "valeur de a"]);
25$c = (Object)(['qwe' => Array(\qwe\UNE_CONSTANTE => 'zxc')]);
26$idk = 'test_asd';
27$class_name = 'test_object';
28class test_object {
29 const TEST_VALUE = ['constant' => 'truc'];
30 private $asd = "qwe";
31 public $qwe = 'bar';
32 private $test_asd = '';
33 function __construct($asd) {
34 $this->test_asd = $asd;
35 }
36 function do_a_barell_roll() {
37 var_dump($this->test_asd);
38 }
39}
40$d = new test_object($c);
41$a = 1338;
42function test(){
43 strlen("qwe");
44}
45echo "Valeur: " . $b['_GET[obj->nop]']["qwe"][$a]->uio . "\n";
46test();
47
48$a = 1337;
49echo "Valeur: " . $b['_GET[obj->nop]']["qwe"][$a]->uio . "\n";
50test();
51}
52?>
53--EXPECTF--
54Valeur: valeur de a
55Valeur: valeur de apres
56[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_4.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_5.phpt b/src/tests/disabled_function_local_var_5.phpt
new file mode 100644
index 0000000..d82574d
--- /dev/null
+++ b/src/tests/disabled_function_local_var_5.phpt
@@ -0,0 +1,33 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9function test(){
10 echo strlen("id") . "\n";
11}
12
13$a = Array();
14echo "Value of a:\n";
15var_dump($a);
16test();
17
18$a = (Object)['zxc' => 'not a good value'];
19echo "Value of a:\n";
20var_dump($a);
21test();
22?>
23--EXPECTF--
24Value of a:
25array(0) {
26}
272
28Value of a:
29object(stdClass)#1 (1) {
30 ["zxc"]=>
31 string(16) "not a good value"
32}
33[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_5.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_6.phpt b/src/tests/disabled_function_local_var_6.phpt
new file mode 100644
index 0000000..90c1815
--- /dev/null
+++ b/src/tests/disabled_function_local_var_6.phpt
@@ -0,0 +1,31 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9namespace asd {
10function test(){
11 strlen("qwe");
12}
13echo "Valeur: " . \asd\test_object::TEST_VALUE['constant'] . "\n";
14test();
15class test_object {
16 const TEST_VALUE = ['constant' => 'no good'];
17 private $asd = "qwe";
18 public $qwe = 'bar';
19 private $test_asd = '';
20 function __construct($asd) {
21 $this->test_asd = $asd;
22 }
23 function do_a_barell_roll() {
24 var_dump($this->test_asd);
25 }
26}
27}
28?>
29--EXPECTF--
30Valeur: no good
31[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_6.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_7.phpt b/src/tests/disabled_function_local_var_7.phpt
new file mode 100644
index 0000000..7ab249a
--- /dev/null
+++ b/src/tests/disabled_function_local_var_7.phpt
@@ -0,0 +1,31 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9namespace asd {
10function test(){
11 strlen("qwe");
12}
13echo "Valeur: " . \asd\test_object::TEST_VALUE . "\n";
14test();
15class test_object {
16 const TEST_VALUE = "qwerty";
17 private $asd = "qwe";
18 public $qwe = 'bar';
19 private $test_asd = '';
20 function __construct($asd) {
21 $this->test_asd = $asd;
22 }
23 function do_a_barell_roll() {
24 var_dump($this->test_asd);
25 }
26}
27}
28?>
29--EXPECTF--
30Valeur: qwerty
31[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_7.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_8.phpt b/src/tests/disabled_function_local_var_8.phpt
new file mode 100644
index 0000000..475b472
--- /dev/null
+++ b/src/tests/disabled_function_local_var_8.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9namespace qwe {
10 const ASD = 'qwerty';
11}
12namespace asd {
13 const asd = 'qwe';
14 echo "Valeur: " . \qwe\ASD . "\n";
15 strlen("qwe");
16}
17?>
18--EXPECTF--
19Valeur: qwerty
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_8.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_9.phpt b/src/tests/disabled_function_local_var_9.phpt
new file mode 100644
index 0000000..fb65bc4
--- /dev/null
+++ b/src/tests/disabled_function_local_var_9.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var.ini
7--FILE--
8<?php
9namespace qwe {
10 const QWE = Array('123'=>'asdfgh');
11}
12namespace asd {
13 const asd = 'qwe';
14 echo "Valeur: " . \qwe\QWE[123]. "\n";
15 strlen("qwe");
16}
17?>
18--EXPECTF--
19Valeur: asdfgh
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_9.php:%d has been disabled.
diff --git a/src/tests/disabled_function_local_var_obj.phpt b/src/tests/disabled_function_local_var_obj.phpt
new file mode 100644
index 0000000..868ea4c
--- /dev/null
+++ b/src/tests/disabled_function_local_var_obj.phpt
@@ -0,0 +1,25 @@
1--TEST--
2Disable functions - match on a local variable
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_function_local_var_obj.ini
7--FILE--
8<?php
9class test_class {
10 public $qwe = 'value';
11 function __construct($arg, $value) {
12 $this->$arg = $value;
13 }
14}
15
16$test_array = ['qwe'];
17$arg = 'qwe';
18$test = new test_class('qwe', 'qwe');
19echo strlen($test->$arg) . "\n";
20$test = new test_class('qwe', 'nop_object');
21echo strlen($test->$arg) . "\n";
22?>
23--EXPECTF--
243
25[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var_obj.php:%d has been disabled.
diff --git a/src/tests/disabled_functions_local_var_array.phpt b/src/tests/disabled_functions_local_var_array.phpt
new file mode 100644
index 0000000..2255cbf
--- /dev/null
+++ b/src/tests/disabled_functions_local_var_array.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array value buried in several levels
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_local_var_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>Array("pof"=>"pif", "foo"=>Array("lol"=>"bbb")), "a"=>"cccc");
13foo($a);
14
15$a=Array("test2"=>Array("foo"=>Array("lol"=>"aaa")), "a"=>"dddd");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_local_var_array.php:3 has been disabled.
diff --git a/src/tests/disabled_functions_local_var_array_key.phpt b/src/tests/disabled_functions_local_var_array_key.phpt
new file mode 100644
index 0000000..4014c05
--- /dev/null
+++ b/src/tests/disabled_functions_local_var_array_key.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array value buried in several levels
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_local_var_array_key.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>Array("pof"=>"pif", "foo"=>Array("lol"=>"bbb")), "a"=>"cccc");
13foo($a);
14
15$a=Array("test2"=>Array("foo"=>Array("aaa"=>"ccc")), "a"=>"dddd");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_local_var_array_key.php:3 has been disabled.
diff --git a/src/tests/disabled_functions_name_type.phpt b/src/tests/disabled_functions_name_type.phpt
index c5b24d6..1022238 100644
--- a/src/tests/disabled_functions_name_type.phpt
+++ b/src/tests/disabled_functions_name_type.phpt
@@ -11,4 +11,4 @@ echo strcmp([1,23], "pouet") . "\n";
11?> 11?>
12--EXPECTF-- 12--EXPECTF--
130 130
14[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strcmp' in %a/disabled_functions_name_type.php:%d has been disabled, because its argument 'str1' content (?) matched a rule. 14[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strcmp' in %a/disabled_functions_name_type.php:%d has been disabled, because its argument '$str1' content (ARRAY) matched a rule.
diff --git a/src/tests/disabled_functions_nul_byte.phpt b/src/tests/disabled_functions_nul_byte.phpt
index b4974a9..f03a8e4 100644
--- a/src/tests/disabled_functions_nul_byte.phpt
+++ b/src/tests/disabled_functions_nul_byte.phpt
@@ -11,4 +11,4 @@ system("id");
11 11
12?> 12?>
13--EXPECTF-- 13--EXPECTF--
14[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_nul_byte.php:2 has been disabled, because its argument 'command' content (0id) matched a rule. 14[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_nul_byte.php:2 has been disabled, because its argument '$command' content (0id) matched a rule.
diff --git a/src/tests/disabled_functions_param.phpt b/src/tests/disabled_functions_param.phpt
index d9f8767..fe0e244 100644
--- a/src/tests/disabled_functions_param.phpt
+++ b/src/tests/disabled_functions_param.phpt
@@ -15,4 +15,4 @@ strcmp("bla", "ble");
15strncmp("bla", "ble", 2); 15strncmp("bla", "ble", 2);
16?> 16?>
17--EXPECTF-- 17--EXPECTF--
18[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/disabled_functions_param.php:2 has been disabled, because its argument 'command' content (id) matched the rule '1'. 18[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/disabled_functions_param.php:2 has been disabled, because its argument '$command' content (id) matched the rule '1'.
diff --git a/src/tests/disabled_functions_param_array.phpt b/src/tests/disabled_functions_param_array.phpt
index 5ca13aa..f023cfc 100644
--- a/src/tests/disabled_functions_param_array.phpt
+++ b/src/tests/disabled_functions_param_array.phpt
@@ -21,4 +21,4 @@ foo($a);
21--EXPECTF-- 21--EXPECTF--
22test1 22test1
23abcde 23abcde
24[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/disabled_functions_param_array.php:3 has been disabled, because its argument 'arr' content (Array) matched the rule '1'. 24[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/disabled_functions_param_array.php:3 has been disabled, because its argument '$arr' content (abcd) matched the rule '1'.
diff --git a/src/tests/disabled_functions_param_array_deref.phpt b/src/tests/disabled_functions_param_array_deref.phpt
index 556cb06..1e8e31b 100644
--- a/src/tests/disabled_functions_param_array_deref.phpt
+++ b/src/tests/disabled_functions_param_array_deref.phpt
@@ -22,4 +22,4 @@ foo($a);
22--EXPECTF-- 22--EXPECTF--
23eee 23eee
24abcdef 24abcdef
25[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_deref.php:3 has been disabled, because its argument 'arr' content (Array) matched the rule '2'. 25[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_deref.php:3 has been disabled, because its argument '$arr' content (abcdef) matched the rule '2'.
diff --git a/src/tests/disabled_functions_param_array_no_value.phpt b/src/tests/disabled_functions_param_array_no_value.phpt
index 06b9839..ac1b5e0 100644
--- a/src/tests/disabled_functions_param_array_no_value.phpt
+++ b/src/tests/disabled_functions_param_array_no_value.phpt
@@ -19,4 +19,4 @@ foo($a);
19?> 19?>
20--EXPECTF-- 20--EXPECTF--
21cccc 21cccc
22[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_no_value.php:3 has been disabled, because its argument 'arr' content (Array) matched the rule '3'. 22[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_no_value.php:3 has been disabled, because its argument '$arr' content (aaa) matched the rule '3'.
diff --git a/src/tests/disabled_functions_param_array_r.phpt b/src/tests/disabled_functions_param_array_r.phpt
new file mode 100644
index 0000000..8bd85ce
--- /dev/null
+++ b/src/tests/disabled_functions_param_array_r.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array using regexp
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_param_r_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>"pof", "pof"=>"pif", "a"=>Array("qwe"=>"bbb"), "a"=>"cccc");
13foo($a);
14
15$a=Array("a"=>"abcd", "pof"=>"pif", "bar"=>Array("qwe"=>"bbb"), "b"=>"cccc");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_r.php:3 has been disabled, because its argument 'arr' content (ARRAY) matched the rule '1'.
diff --git a/src/tests/disabled_functions_param_array_r_keys.phpt b/src/tests/disabled_functions_param_array_r_keys.phpt
new file mode 100644
index 0000000..e9ef50d
--- /dev/null
+++ b/src/tests/disabled_functions_param_array_r_keys.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array using regexp
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_param_r_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>"pof", "pof"=>"pif", "qwe"=>Array("qwe"=>"bbb"), "a"=>"cccc");
13foo($a);
14
15$a=Array("a"=>"", "pof"=>"pif", "bar"=>Array("qwe"=>"bbb"), "qweabcqwe"=>"nop");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_r_keys.php:3 has been disabled, because its argument 'arr' content (ARRAY) matched the rule '2'.
diff --git a/src/tests/disabled_functions_param_array_several_levels.phpt b/src/tests/disabled_functions_param_array_several_levels.phpt
index cef6ded..f5665fb 100644
--- a/src/tests/disabled_functions_param_array_several_levels.phpt
+++ b/src/tests/disabled_functions_param_array_several_levels.phpt
@@ -17,4 +17,4 @@ foo($a);
17?> 17?>
18--EXPECTF-- 18--EXPECTF--
19cccc 19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_several_levels.php:3 has been disabled, because its argument 'arr' content (Array) matched the rule '4'. 20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_several_levels.php:3 has been disabled, because its argument '$arr' content (ARRAY) matched the rule '4'.
diff --git a/src/tests/disabled_functions_param_array_several_levels_int.phpt b/src/tests/disabled_functions_param_array_several_levels_int.phpt
new file mode 100644
index 0000000..2e546f4
--- /dev/null
+++ b/src/tests/disabled_functions_param_array_several_levels_int.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array value buried in several levels
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_param_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>Array("pof"=>"pif", "foo"=>Array("lol"=>"bbb")), "a"=>"cccc");
13foo($a);
14
15$a=Array("test2"=>Array("foo"=>Array("123"=>"aaa")), "a"=>"dddd");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_several_levels_int.php:3 has been disabled, because its argument '$arr' content (ARRAY) matched the rule '4'.
diff --git a/src/tests/disabled_functions_param_array_several_levels_keys.phpt b/src/tests/disabled_functions_param_array_several_levels_keys.phpt
new file mode 100644
index 0000000..1be59fc
--- /dev/null
+++ b/src/tests/disabled_functions_param_array_several_levels_keys.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array value buried in several levels
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_param_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>Array("pof"=>"pif", "bar"=>Array("qwe"=>"bbb")), "a"=>"cccc");
13foo($a);
14
15$a=Array("test2"=>Array("bar"=>Array("lol"=>"aaa")), "a"=>"dddd");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_several_levels_keys.php:3 has been disabled, because its argument '$arr' content (ARRAY) matched the rule '5'.
diff --git a/src/tests/disabled_functions_param_array_several_levels_keys_int.phpt b/src/tests/disabled_functions_param_array_several_levels_keys_int.phpt
new file mode 100644
index 0000000..acb696f
--- /dev/null
+++ b/src/tests/disabled_functions_param_array_several_levels_keys_int.phpt
@@ -0,0 +1,20 @@
1--TEST--
2Disable functions - match on an array value buried in several levels
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_param_array.ini
7--FILE--
8<?php
9function foo($arr) {
10 echo $arr["a"]."\n";
11}
12$a=Array("test2"=>Array("pof"=>"pif", "bar"=>Array("qwe"=>"bbb")), "a"=>"cccc");
13foo($a);
14
15$a=Array("test2"=>Array("bar"=>Array("123"=>"aaa")), "a"=>"dddd");
16foo($a);
17?>
18--EXPECTF--
19cccc
20[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foo' in %a/tests/disabled_functions_param_array_several_levels_keys_int.php:3 has been disabled, because its argument '$arr' content (ARRAY) matched the rule '6'.
diff --git a/src/tests/disabled_functions_param_int.phpt b/src/tests/disabled_functions_param_int.phpt
index 0e6a62c..692009a 100644
--- a/src/tests/disabled_functions_param_int.phpt
+++ b/src/tests/disabled_functions_param_int.phpt
@@ -18,4 +18,4 @@ foobar("10");
18?> 18?>
19--EXPECTF-- 19--EXPECTF--
201 201
21[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foobar' in %a/tests/disabled_functions_param_int.php:3 has been disabled, because its argument 'id' content (42) matched a rule. 21[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'foobar' in %a/tests/disabled_functions_param_int.php:3 has been disabled, because its argument '$id' content (42) matched a rule.
diff --git a/src/tests/disabled_functions_pos_type.phpt b/src/tests/disabled_functions_pos_type.phpt
new file mode 100644
index 0000000..7556440
--- /dev/null
+++ b/src/tests/disabled_functions_pos_type.phpt
@@ -0,0 +1,14 @@
1--TEST--
2Disable functions - match on argument's position
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/disabled_functions_pos.ini
7--FILE--
8<?php
9system([123, 456]);
10?>
11--EXPECTF--
12[snuffleupagus][0.0.0.0][config][error] It seems that you wrote a rule filtering on the 0th argument of the function 'system', but it takes only 2 arguments. Matching on _all_ arguments instead.
13[snuffleupagus][0.0.0.0][config][error] It seems that you wrote a rule filtering on the 1st argument of the function 'system', but it takes only 2 arguments. Matching on _all_ arguments instead.
14[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/disabled_functions_pos_type.php:2 has been disabled, because its argument 'command' content (?) matched the rule '1'.
diff --git a/src/tests/disabled_functions_runtime.phpt b/src/tests/disabled_functions_runtime.phpt
index 1c6a141..1508735 100644
--- a/src/tests/disabled_functions_runtime.phpt
+++ b/src/tests/disabled_functions_runtime.phpt
@@ -23,7 +23,7 @@ test('1338');test('1337');
23?> 23?>
24--EXPECTF-- 24--EXPECTF--
251338 251338
26[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'test' in %a has been disabled, because its argument 'param' content (1337) matched a rule. 26[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'test' in %a has been disabled, because its argument '$param' content (1337) matched a rule.
27--CLEAN-- 27--CLEAN--
28<?php 28<?php
29unlink("file_to_include1.php"); 29unlink("file_to_include1.php");