diff options
Diffstat (limited to 'src/tests')
208 files changed, 2328 insertions, 0 deletions
diff --git a/src/tests/broken_conf.phpt b/src/tests/broken_conf.phpt new file mode 100644 index 0000000..ae0ef6e --- /dev/null +++ b/src/tests/broken_conf.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration prefix for 'this is a broken line'. | ||
| 10 | |||
diff --git a/src/tests/broken_conf2.phpt b/src/tests/broken_conf2.phpt new file mode 100644 index 0000000..88a2232 --- /dev/null +++ b/src/tests/broken_conf2.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf2.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration section 'sp.wrong'. | ||
diff --git a/src/tests/broken_conf_config_regexp.phpt b/src/tests/broken_conf_config_regexp.phpt new file mode 100644 index 0000000..75bc603 --- /dev/null +++ b/src/tests/broken_conf_config_regexp.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_config_regexp.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Failed to compile '*.': nothing to repeat. | ||
| 10 | [snuffleupagus][0.0.0.0][config][error] '.filename_r()' is expecting a valid regexp, and not '"*."'. | ||
diff --git a/src/tests/broken_conf_enable_disable.phpt b/src/tests/broken_conf_enable_disable.phpt new file mode 100644 index 0000000..2f3fe19 --- /dev/null +++ b/src/tests/broken_conf_enable_disable.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Global strict mode | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/borken_conf_enable_disable.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECTF-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] A rule can't be enabled and disabled. | ||
diff --git a/src/tests/broken_conf_expecting_bool.phpt b/src/tests/broken_conf_expecting_bool.phpt new file mode 100644 index 0000000..80e1b61 --- /dev/null +++ b/src/tests/broken_conf_expecting_bool.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Bad boolean value in configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_expecting_bool.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Trailing chars '337);' at the end of '.enable(1337);'. | ||
diff --git a/src/tests/broken_conf_expecting_int.phpt b/src/tests/broken_conf_expecting_int.phpt new file mode 100644 index 0000000..e806337 --- /dev/null +++ b/src/tests/broken_conf_expecting_int.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Bad integer value in configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_expecting_int.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] .mask_ipv4() is expecting a valid integer. | ||
diff --git a/src/tests/broken_conf_invalid_cidr.phpt b/src/tests/broken_conf_invalid_cidr.phpt new file mode 100644 index 0000000..515091b --- /dev/null +++ b/src/tests/broken_conf_invalid_cidr.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_invalid_cidr.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] '42' isn't a valid ipv4 mask. | ||
diff --git a/src/tests/broken_conf_invalid_cidr6.phpt b/src/tests/broken_conf_invalid_cidr6.phpt new file mode 100644 index 0000000..d20cfcd --- /dev/null +++ b/src/tests/broken_conf_invalid_cidr6.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] 'ZZZ' isn't a valid network mask. | ||
diff --git a/src/tests/broken_conf_invalid_cidr6_no_slash.phpt b/src/tests/broken_conf_invalid_cidr6_no_slash.phpt new file mode 100644 index 0000000..de70a05 --- /dev/null +++ b/src/tests/broken_conf_invalid_cidr6_no_slash.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration, invalid cidr for ipv6 because there is no `/` in it | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6_no_slash.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] '2001:0db8:0000:0000:0000:ff00:0042:8329' isn't a valid network mask, it seems that you forgot a '/'. | ||
diff --git a/src/tests/broken_conf_invalid_cidr6_too_big.phpt b/src/tests/broken_conf_invalid_cidr6_too_big.phpt new file mode 100644 index 0000000..47d4a5d --- /dev/null +++ b/src/tests/broken_conf_invalid_cidr6_too_big.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration, cidr for ipv6 is too big, that will `mod` to 25. | ||
| 3 | (13337%128 = 25) | ||
| 4 | --SKIPIF-- | ||
| 5 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 6 | --INI-- | ||
| 7 | sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6_too_big.ini | ||
| 8 | --FILE-- | ||
| 9 | --EXPECT-- | ||
diff --git a/src/tests/broken_conf_invalid_cidr_value.phpt b/src/tests/broken_conf_invalid_cidr_value.phpt new file mode 100644 index 0000000..712f123 --- /dev/null +++ b/src/tests/broken_conf_invalid_cidr_value.phpt | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration, invalid cidr value | ||
| 3 | (13337%128 = 25) | ||
| 4 | --SKIPIF-- | ||
| 5 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 6 | --INI-- | ||
| 7 | sp.configuration_file={PWD}/config/broken_conf_invalid_cidr_value.ini | ||
| 8 | --FILE-- | ||
| 9 | --EXPECT-- | ||
| 10 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"': it doesn't look like a valid string. | ||
| 11 | [snuffleupagus][0.0.0.0][config][error] " doesn't contain a valid cidr. | ||
diff --git a/src/tests/broken_conf_invalid_type.phpt b/src/tests/broken_conf_invalid_type.phpt new file mode 100644 index 0000000..29d2ff5 --- /dev/null +++ b/src/tests/broken_conf_invalid_type.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken conf with wrong type | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_invalid_type.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECTF-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"totally_wrong"_type")': it doesn't look like a valid string. | ||
diff --git a/src/tests/broken_conf_line_empty_string.phpt b/src/tests/broken_conf_line_empty_string.phpt new file mode 100644 index 0000000..c4334b9 --- /dev/null +++ b/src/tests/broken_conf_line_empty_string.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Configuration line with an empty string | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_line_empty_string.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '': it doesn't look like a valid string. | ||
diff --git a/src/tests/broken_conf_line_no_closing.phpt b/src/tests/broken_conf_line_no_closing.phpt new file mode 100644 index 0000000..07c94e4 --- /dev/null +++ b/src/tests/broken_conf_line_no_closing.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Configuration line without closing parenthese | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_line_no_closing.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"123"': it doesn't look like a valid string. | ||
diff --git a/src/tests/broken_conf_line_too_long.phpt b/src/tests/broken_conf_line_too_long.phpt new file mode 100644 index 0000000..8e82708 --- /dev/null +++ b/src/tests/broken_conf_line_too_long.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Line too long in configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_line_too_long.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] The following line is too long: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111);. | ||
| 10 | [snuffleupagus][0.0.0.0][error][error] .mask_ipv4() is expecting a valid integer. | ||
diff --git a/src/tests/broken_conf_lots_of_quotes.phpt b/src/tests/broken_conf_lots_of_quotes.phpt new file mode 100644 index 0000000..e877cfa --- /dev/null +++ b/src/tests/broken_conf_lots_of_quotes.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Configuration line with too many quotes | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_lots_of_quotes.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"this\"is a weird\"\"\"cookie\"name"");': it doesn't look like a valid string. | ||
diff --git a/src/tests/broken_conf_mutually_exclusive.phpt b/src/tests/broken_conf_mutually_exclusive.phpt new file mode 100644 index 0000000..9de7e5a --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").param("id").value("42").value_r("^id$").drop();':'.value' and '.regexp' are mutually exclusives. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive2.phpt b/src/tests/broken_conf_mutually_exclusive2.phpt new file mode 100644 index 0000000..9d3ea36 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive2.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive2.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").function_r("system").param("id").value("42").drop();': '.r_function' and '.function' are mutually exclusive. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive3.phpt b/src/tests/broken_conf_mutually_exclusive3.phpt new file mode 100644 index 0000000..58686a3 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive3.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive3.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").param("id").value("42").filename_r("^id$").filename("pouet.txt").drop();':'.r_filename' and '.filename' are mutually exclusive. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive4.phpt b/src/tests/broken_conf_mutually_exclusive4.phpt new file mode 100644 index 0000000..d854380 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive4.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive4.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").param("id").value("42").param_r("^id$").drop();':'.r_param' and '.param' are mutually exclusive. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive5.phpt b/src/tests/broken_conf_mutually_exclusive5.phpt new file mode 100644 index 0000000..a265c30 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive5.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive5.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").ret("0").drop().ret_r("^0$");':'.r_ret' and '.ret' are mutually exclusive. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive6.phpt b/src/tests/broken_conf_mutually_exclusive6.phpt new file mode 100644 index 0000000..d0cdb85 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive6.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive6.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").param("id").value("42").ret_r("^0$").drop();':`ret` and `param` are mutually exclusives. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive7.phpt b/src/tests/broken_conf_mutually_exclusive7.phpt new file mode 100644 index 0000000..c9a3513 --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive7.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive7.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.function("system").ret("0").drop().allow();': The rule must either be a `drop` or and `allow` one. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_mutually_exclusive8.phpt b/src/tests/broken_conf_mutually_exclusive8.phpt new file mode 100644 index 0000000..7c5baee --- /dev/null +++ b/src/tests/broken_conf_mutually_exclusive8.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive8.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Invalid configuration line: 'sp.disabled_functions.ret("0").drop();': must take a function name. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_no_closing_misc.phpt b/src/tests/broken_conf_no_closing_misc.phpt new file mode 100644 index 0000000..1d1e112 --- /dev/null +++ b/src/tests/broken_conf_no_closing_misc.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Configuration line without closing parenthese, misc | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_no_closing_misc.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Missing closing ) in line 123. | ||
| 10 | [snuffleupagus][0.0.0.0][error][error] .mask_ipv4() is expecting a valid integer. | ||
diff --git a/src/tests/broken_conf_weird_keyword.phpt b/src/tests/broken_conf_weird_keyword.phpt new file mode 100644 index 0000000..5293791 --- /dev/null +++ b/src/tests/broken_conf_weird_keyword.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Bad config, unknown keyword | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_weird_keyword.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] Trailing chars '.not_a_valid_keyword("test");' at the end of '.enable().not_a_valid_keyword("test");'. \ No newline at end of file | ||
diff --git a/src/tests/broken_conf_wrong_quotes.phpt b/src/tests/broken_conf_wrong_quotes.phpt new file mode 100644 index 0000000..b6324fe --- /dev/null +++ b/src/tests/broken_conf_wrong_quotes.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Configuration line with too many quotes | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_wrong_quotes.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"\)': it doesn't look like a valid string. | ||
diff --git a/src/tests/broken_conf_wrong_type.phpt b/src/tests/broken_conf_wrong_type.phpt new file mode 100644 index 0000000..338ca3a --- /dev/null +++ b/src/tests/broken_conf_wrong_type.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken conf with wrong type | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_conf_wrong_type.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECTF-- | ||
| 9 | [snuffleupagus][0.0.0.0][error][error] .ret_type() is expecting a valid php type ('false', 'true', 'array'. 'object', 'long', 'double', 'null', 'resource', 'reference', 'undef'). | ||
diff --git a/src/tests/broken_regexp.phpt b/src/tests/broken_regexp.phpt new file mode 100644 index 0000000..cbfef7d --- /dev/null +++ b/src/tests/broken_regexp.phpt | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | --TEST-- | ||
| 2 | Broken regexp | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/broken_regexp.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECTF-- | ||
| 9 | [snuffleupagus][0.0.0.0][config][error] '.value_r()' is expecting a valid regexp, and not '"^$["'. | ||
diff --git a/src/tests/config/borken_conf_enable_disable.ini b/src/tests/config/borken_conf_enable_disable.ini new file mode 100644 index 0000000..4e95294 --- /dev/null +++ b/src/tests/config/borken_conf_enable_disable.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.global_strict.disable().enable(); | |||
diff --git a/src/tests/config/broken_conf.ini b/src/tests/config/broken_conf.ini new file mode 100644 index 0000000..0595320 --- /dev/null +++ b/src/tests/config/broken_conf.ini | |||
| @@ -0,0 +1 @@ | |||
| this is a broken line | |||
diff --git a/src/tests/config/broken_conf2.ini b/src/tests/config/broken_conf2.ini new file mode 100644 index 0000000..fdb6b8f --- /dev/null +++ b/src/tests/config/broken_conf2.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.wrong | |||
diff --git a/src/tests/config/broken_conf_expecting_bool.ini b/src/tests/config/broken_conf_expecting_bool.ini new file mode 100644 index 0000000..51c28b2 --- /dev/null +++ b/src/tests/config/broken_conf_expecting_bool.ini | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # this is an example of broken conf | ||
| 2 | |||
| 3 | |||
| 4 | ; this is another comment | ||
| 5 | sp.harden_random.enable(1337); | ||
diff --git a/src/tests/config/broken_conf_expecting_int.ini b/src/tests/config/broken_conf_expecting_int.ini new file mode 100644 index 0000000..8e2efea --- /dev/null +++ b/src/tests/config/broken_conf_expecting_int.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.global.secret_key("abcdef"); | ||
| 2 | sp.cookie_encryption.cookie("super_cookie").mask_ipv4(abc); | ||
diff --git a/src/tests/config/broken_conf_invalid_cidr.ini b/src/tests/config/broken_conf_invalid_cidr.ini new file mode 100644 index 0000000..0cdc695 --- /dev/null +++ b/src/tests/config/broken_conf_invalid_cidr.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr("127.0.0.1/42"); | |||
diff --git a/src/tests/config/broken_conf_invalid_cidr6.ini b/src/tests/config/broken_conf_invalid_cidr6.ini new file mode 100644 index 0000000..e5a120c --- /dev/null +++ b/src/tests/config/broken_conf_invalid_cidr6.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr("2001:0db8:0000:0000:0000:ff00:0042:8329/ZZZ"); | |||
diff --git a/src/tests/config/broken_conf_invalid_cidr6_no_slash.ini b/src/tests/config/broken_conf_invalid_cidr6_no_slash.ini new file mode 100644 index 0000000..e4cf835 --- /dev/null +++ b/src/tests/config/broken_conf_invalid_cidr6_no_slash.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr("2001:0db8:0000:0000:0000:ff00:0042:8329"); | |||
diff --git a/src/tests/config/broken_conf_invalid_cidr6_too_big.ini b/src/tests/config/broken_conf_invalid_cidr6_too_big.ini new file mode 100644 index 0000000..417dee7 --- /dev/null +++ b/src/tests/config/broken_conf_invalid_cidr6_too_big.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr("2001:0db8:0000:0000:0000:ff00:0042:8329/13337"); | |||
diff --git a/src/tests/config/broken_conf_invalid_cidr_value.ini b/src/tests/config/broken_conf_invalid_cidr_value.ini new file mode 100644 index 0000000..733e889 --- /dev/null +++ b/src/tests/config/broken_conf_invalid_cidr_value.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr(" | |||
diff --git a/src/tests/config/broken_conf_invalid_type.ini b/src/tests/config/broken_conf_invalid_type.ini new file mode 100644 index 0000000..b2cd8cd --- /dev/null +++ b/src/tests/config/broken_conf_invalid_type.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("strpos").ret_type("totally_wrong"_type") | |||
diff --git a/src/tests/config/broken_conf_line_empty_string.ini b/src/tests/config/broken_conf_line_empty_string.ini new file mode 100644 index 0000000..74d0e5a --- /dev/null +++ b/src/tests/config/broken_conf_line_empty_string.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.mask_ipv4(123).cookie( | |||
diff --git a/src/tests/config/broken_conf_line_no_closing.ini b/src/tests/config/broken_conf_line_no_closing.ini new file mode 100644 index 0000000..bcac291 --- /dev/null +++ b/src/tests/config/broken_conf_line_no_closing.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.mask_ipv4(123).cookie("123" | |||
diff --git a/src/tests/config/broken_conf_line_too_long.ini b/src/tests/config/broken_conf_line_too_long.ini new file mode 100644 index 0000000..ed057a5 --- /dev/null +++ b/src/tests/config/broken_conf_line_too_long.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.cookie("super_cookie").mask_ipv4(1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111); | |||
diff --git a/src/tests/config/broken_conf_lots_of_quotes.ini b/src/tests/config/broken_conf_lots_of_quotes.ini new file mode 100644 index 0000000..dfd48e7 --- /dev/null +++ b/src/tests/config/broken_conf_lots_of_quotes.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.mask_ipv4(123).cookie("this\"is a weird\"\"\"cookie\"name""); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive.ini b/src/tests/config/broken_conf_mutually_exclusive.ini new file mode 100644 index 0000000..af1d505 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param("id").value("42").value_r("^id$").drop(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive2.ini b/src/tests/config/broken_conf_mutually_exclusive2.ini new file mode 100644 index 0000000..29b21d4 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive2.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").function_r("system").param("id").value("42").drop(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive3.ini b/src/tests/config/broken_conf_mutually_exclusive3.ini new file mode 100644 index 0000000..556de08 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive3.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param("id").value("42").filename_r("^id$").filename("pouet.txt").drop(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive4.ini b/src/tests/config/broken_conf_mutually_exclusive4.ini new file mode 100644 index 0000000..d212ad4 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive4.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param("id").value("42").param_r("^id$").drop(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive5.ini b/src/tests/config/broken_conf_mutually_exclusive5.ini new file mode 100644 index 0000000..5b64079 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive5.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").ret("0").drop().ret_r("^0$"); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive6.ini b/src/tests/config/broken_conf_mutually_exclusive6.ini new file mode 100644 index 0000000..d08ee58 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive6.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param("id").value("42").ret_r("^0$").drop(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive7.ini b/src/tests/config/broken_conf_mutually_exclusive7.ini new file mode 100644 index 0000000..645c26c --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive7.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").ret("0").drop().allow(); | |||
diff --git a/src/tests/config/broken_conf_mutually_exclusive8.ini b/src/tests/config/broken_conf_mutually_exclusive8.ini new file mode 100644 index 0000000..b08ef57 --- /dev/null +++ b/src/tests/config/broken_conf_mutually_exclusive8.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.ret("0").drop(); | |||
diff --git a/src/tests/config/broken_conf_no_closing_misc.ini b/src/tests/config/broken_conf_no_closing_misc.ini new file mode 100644 index 0000000..2cb79a8 --- /dev/null +++ b/src/tests/config/broken_conf_no_closing_misc.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.cookie("123").mask_ipv4(123 | |||
diff --git a/src/tests/config/broken_conf_to_few_args.ini b/src/tests/config/broken_conf_to_few_args.ini new file mode 100644 index 0000000..89e19be --- /dev/null +++ b/src/tests/config/broken_conf_to_few_args.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.harden_random.enable(); | |||
diff --git a/src/tests/config/broken_conf_weird_keyword.ini b/src/tests/config/broken_conf_weird_keyword.ini new file mode 100644 index 0000000..bf5e7f5 --- /dev/null +++ b/src/tests/config/broken_conf_weird_keyword.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.harden_random.enable().not_a_valid_keyword("test"); | |||
diff --git a/src/tests/config/broken_conf_wrong_quotes.ini b/src/tests/config/broken_conf_wrong_quotes.ini new file mode 100644 index 0000000..c8cc949 --- /dev/null +++ b/src/tests/config/broken_conf_wrong_quotes.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.cookie_encryption.mask_ipv4(123).cookie("\) | |||
diff --git a/src/tests/config/broken_conf_wrong_type.ini b/src/tests/config/broken_conf_wrong_type.ini new file mode 100644 index 0000000..6ecca6a --- /dev/null +++ b/src/tests/config/broken_conf_wrong_type.ini | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | sp.disable_functions.function("strpos").ret_type("undef").drop().alias("Return value is undef"); | ||
| 2 | sp.disable_functions.function("strpos").ret_type("null").drop().alias("Return value is null"); | ||
| 3 | sp.disable_functions.function("strpos").ret_type("object").drop().alias("Return value is object"); | ||
| 4 | sp.disable_functions.function("strpos").ret_type("reference").drop().alias("Return value is reference"); | ||
| 5 | sp.disable_functions.function("strpos").ret_type("totally_wrong_type").drop().alias("Return value is FALSE"); | ||
diff --git a/src/tests/config/broken_config_regexp.ini b/src/tests/config/broken_config_regexp.ini new file mode 100644 index 0000000..efad83e --- /dev/null +++ b/src/tests/config/broken_config_regexp.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function_r("^system$").filename_r("*.").drop(); | |||
diff --git a/src/tests/config/broken_regexp.ini b/src/tests/config/broken_regexp.ini new file mode 100644 index 0000000..8e1f69a --- /dev/null +++ b/src/tests/config/broken_regexp.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("AwesomeClass::method3").param("a").drop().value_r("^$["); | |||
diff --git a/src/tests/config/config_disable_writable.ini b/src/tests/config/config_disable_writable.ini new file mode 100644 index 0000000..9f90601 --- /dev/null +++ b/src/tests/config/config_disable_writable.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.readonly_exec.enable(); | |||
diff --git a/src/tests/config/config_disable_writable_disabled.ini b/src/tests/config/config_disable_writable_disabled.ini new file mode 100644 index 0000000..6a33437 --- /dev/null +++ b/src/tests/config/config_disable_writable_disabled.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.readonly_exec.disable(); | |||
diff --git a/src/tests/config/config_disable_writable_simulation.ini b/src/tests/config/config_disable_writable_simulation.ini new file mode 100644 index 0000000..52a43ba --- /dev/null +++ b/src/tests/config/config_disable_writable_simulation.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.readonly_exec.enable().simulation(); | |||
diff --git a/src/tests/config/config_disabled_functions_filename_r.ini b/src/tests/config/config_disabled_functions_filename_r.ini new file mode 100644 index 0000000..b92f136 --- /dev/null +++ b/src/tests/config/config_disabled_functions_filename_r.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function_r("^system$").filename_r("\\.txt$").drop(); | ||
| 2 | sp.disable_functions.function_r("^shell_exec$").filename_r("\\.php$").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_method.ini b/src/tests/config/config_disabled_functions_method.ini new file mode 100644 index 0000000..4d088d2 --- /dev/null +++ b/src/tests/config/config_disabled_functions_method.ini | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | sp.disable_functions.function("AwesomeClass::method1").drop(); | ||
| 2 | sp.disable_functions.function("method2").drop(); | ||
| 3 | sp.disable_functions.function("AwesomeClass::method3").param("a").value("pouet").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_name_r.ini b/src/tests/config/config_disabled_functions_name_r.ini new file mode 100644 index 0000000..3f7178e --- /dev/null +++ b/src/tests/config/config_disabled_functions_name_r.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function_r("^not_system$").ret("42").drop(); | ||
| 2 | sp.disable_functions.function_r("^system$").ret("1337").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_name_type.ini b/src/tests/config/config_disabled_functions_name_type.ini new file mode 100644 index 0000000..2b433df --- /dev/null +++ b/src/tests/config/config_disabled_functions_name_type.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function_r("^strcmp$").param("str1").param_type("array").drop(); | |||
diff --git a/src/tests/config/config_disabled_functions_namespace.ini b/src/tests/config/config_disabled_functions_namespace.ini new file mode 100644 index 0000000..d09b81b --- /dev/null +++ b/src/tests/config/config_disabled_functions_namespace.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("strcmp").drop(); | ||
| 2 | sp.disable_functions.function("my_super_namespace::my_function").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_nul_byte.ini b/src/tests/config/config_disabled_functions_nul_byte.ini new file mode 100644 index 0000000..7994583 --- /dev/null +++ b/src/tests/config/config_disabled_functions_nul_byte.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param("command").value_r("id").drop(); \ No newline at end of file | |||
diff --git a/src/tests/config/config_disabled_functions_param.ini b/src/tests/config/config_disabled_functions_param.ini new file mode 100644 index 0000000..7363781 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param.ini | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | sp.disable_functions.function("system").param("command").value_r("^id$").alias("1").drop(); | ||
| 2 | sp.disable_functions.function("array_sum").param("array").value_r("^8$").alias("2").drop(); | ||
| 3 | sp.disable_functions.function("shell_exec").param("cmd").value("id").alias("3").drop(); | ||
| 4 | sp.disable_functions.function("shell_exec").param("cmd").value("bla").alias("4").drop(); | ||
| 5 | sp.disable_functions.function("strcmp").param("str1").value("bla").alias("5").drop().simulation(); | ||
| 6 | sp.disable_functions.function("strncmp").param("str1").value("bla").drop().simulation(); | ||
diff --git a/src/tests/config/config_disabled_functions_param_alias.ini b/src/tests/config/config_disabled_functions_param_alias.ini new file mode 100644 index 0000000..f8d9f43 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_alias.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("system").alias("1").drop(); | ||
| 2 | sp.disable_functions.function("shell_exec").alias("2").drop().simulation(); | ||
diff --git a/src/tests/config/config_disabled_functions_param_allow.ini b/src/tests/config/config_disabled_functions_param_allow.ini new file mode 100644 index 0000000..e349b38 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_allow.ini | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | sp.disable_functions.function("system").param("command").value("echo win").filename("test.php").drop(); | ||
| 2 | sp.disable_functions.function("system").param("command").value("echo win").allow(); | ||
| 3 | sp.disable_functions.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 new file mode 100644 index 0000000..7b71692 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_array.ini | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | sp.disable_functions.function("foo").param("arr").value("abcd").alias("1").drop(); | ||
| 2 | sp.disable_functions.function("foo").param("arr[bla]").value("abcdef").alias("2").drop(); | ||
| 3 | sp.disable_functions.function("foo").param("arr[test]").alias("3").drop(); | ||
| 4 | sp.disable_functions.function("foo").param("arr[test2][foo][lol]").value("aaa").alias("4").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_param_int.ini b/src/tests/config/config_disabled_functions_param_int.ini new file mode 100644 index 0000000..2552f0a --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_int.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("foobar").param("id").value("42").drop(); | ||
| 2 | sp.disable_functions.function("foobar").param("id").value_r("^1337").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_param_r.ini b/src/tests/config/config_disabled_functions_param_r.ini new file mode 100644 index 0000000..d9f6692 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_r.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").param_r("^command$").value("id").drop(); | |||
diff --git a/src/tests/config/config_disabled_functions_param_runtime.ini b/src/tests/config/config_disabled_functions_param_runtime.ini new file mode 100644 index 0000000..641bd0a --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_runtime.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("test").param("param").value_r("1337").drop(); | |||
diff --git a/src/tests/config/config_disabled_functions_param_str_representation.ini b/src/tests/config/config_disabled_functions_param_str_representation.ini new file mode 100644 index 0000000..7171a30 --- /dev/null +++ b/src/tests/config/config_disabled_functions_param_str_representation.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("var_export").param("var").value("bla").drop(); | |||
diff --git a/src/tests/config/config_disabled_functions_require.ini b/src/tests/config/config_disabled_functions_require.ini new file mode 100644 index 0000000..474fada --- /dev/null +++ b/src/tests/config/config_disabled_functions_require.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("require").param("").value_r("meh$").drop(); | |||
diff --git a/src/tests/config/config_disabled_functions_ret_allow.ini b/src/tests/config/config_disabled_functions_ret_allow.ini new file mode 100644 index 0000000..1884227 --- /dev/null +++ b/src/tests/config/config_disabled_functions_ret_allow.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("strpos").hash("70b33f3eaf585b245640bb2c92445d0040b2bcb31395aa25dede9f2df4dbcbe8").allow(); | ||
| 2 | sp.disable_functions.function("strpos").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_ret_allow_value.ini b/src/tests/config/config_disabled_functions_ret_allow_value.ini new file mode 100644 index 0000000..e179819 --- /dev/null +++ b/src/tests/config/config_disabled_functions_ret_allow_value.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("strpos").ret("0").allow(); | |||
diff --git a/src/tests/config/config_disabled_functions_ret_right_hash.ini b/src/tests/config/config_disabled_functions_ret_right_hash.ini new file mode 100644 index 0000000..6f49177 --- /dev/null +++ b/src/tests/config/config_disabled_functions_ret_right_hash.ini | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | sp.disable_functions.function("system").ret("1").drop(); | ||
| 2 | sp.disable_functions.function("system").ret("1337").hash("123456789597a81a2b862cdb49920e2cba2e5979a3fc374c58c803e8f5c99a10").drop(); | ||
| 3 | sp.disable_functions.function("system").ret("1338").hash("522a976fa597a81a2b862cdb49920e2cba2e5979a3fc374c58c803e8f5c99a10").drop(); | ||
| 4 | sp.disable_functions.function("system").ret("1337").hash("522a976fa597a81a2b862cdb49920e2cba2e5979a3fc374c58c803e8f5c99a10").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_ret_simulation.ini b/src/tests/config/config_disabled_functions_ret_simulation.ini new file mode 100644 index 0000000..ee46c4b --- /dev/null +++ b/src/tests/config/config_disabled_functions_ret_simulation.ini | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | sp.disable_functions.function("strpos").ret("0").simulation().drop(); | ||
| 2 | sp.disable_functions.function("stripos").ret("0").simulation().drop().alias("1"); | ||
| 3 | sp.disable_functions.function("strcmp").ret("0").drop(); | ||
diff --git a/src/tests/config/config_disabled_functions_right_hash.ini b/src/tests/config/config_disabled_functions_right_hash.ini new file mode 100644 index 0000000..fab68fa --- /dev/null +++ b/src/tests/config/config_disabled_functions_right_hash.ini | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | sp.disable_functions.function("system").hash("1337c3ad8cf096272cd0e78768af3b11325f498de5c2c36f40adc43643af378a").allow(); | ||
| 2 | sp.disable_functions.function("system").hash("d259c3ad8cf096272cd0e78768af3b11325f498de5c2c36f40adc43643af378a").allow(); | ||
| 3 | sp.disable_functions.function("system").drop(); \ No newline at end of file | ||
diff --git a/src/tests/config/config_disabled_user_functions.ini b/src/tests/config/config_disabled_user_functions.ini new file mode 100644 index 0000000..15cbccc --- /dev/null +++ b/src/tests/config/config_disabled_user_functions.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("my_super_function").drop(); | |||
diff --git a/src/tests/config/config_encrypted_cookies.ini b/src/tests/config/config_encrypted_cookies.ini new file mode 100644 index 0000000..710e863 --- /dev/null +++ b/src/tests/config/config_encrypted_cookies.ini | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | sp.global.secret_key("abcdef"); | ||
| 2 | sp.cookie_encryption.cookie("super_cookie").mask_ipv4(8).mask_ipv6(2); | ||
| 3 | sp.auto_cookie_secure.enable(); | ||
diff --git a/src/tests/config/config_noncore_function_hooking.ini b/src/tests/config/config_noncore_function_hooking.ini new file mode 100644 index 0000000..88f2acf --- /dev/null +++ b/src/tests/config/config_noncore_function_hooking.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("custom_fun").drop(); | |||
diff --git a/src/tests/config/config_rand_harden_disabled.ini b/src/tests/config/config_rand_harden_disabled.ini new file mode 100644 index 0000000..b9cd227 --- /dev/null +++ b/src/tests/config/config_rand_harden_disabled.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.harden_random.disable(); | |||
diff --git a/src/tests/config/config_serialize.ini b/src/tests/config/config_serialize.ini new file mode 100644 index 0000000..f2c1699 --- /dev/null +++ b/src/tests/config/config_serialize.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.global.secret_key("abcdef"); | ||
| 2 | sp.unserialize_hmac.enable(); \ No newline at end of file | ||
diff --git a/src/tests/config/config_serialize_sim.ini b/src/tests/config/config_serialize_sim.ini new file mode 100644 index 0000000..7f015e0 --- /dev/null +++ b/src/tests/config/config_serialize_sim.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.global.secret_key("abcdef"); | ||
| 2 | sp.unserialize_hmac.enable().simulation(); | ||
diff --git a/src/tests/config/disable_xxe.ini b/src/tests/config/disable_xxe.ini new file mode 100644 index 0000000..bc9d1f2 --- /dev/null +++ b/src/tests/config/disable_xxe.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_xxe.enable(); | |||
diff --git a/src/tests/config/disable_xxe_disable.ini b/src/tests/config/disable_xxe_disable.ini new file mode 100644 index 0000000..bb1e432 --- /dev/null +++ b/src/tests/config/disable_xxe_disable.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_xxe.disable(); | |||
diff --git a/src/tests/config/disabled_function_local_var.ini b/src/tests/config/disabled_function_local_var.ini new file mode 100644 index 0000000..64d98dc --- /dev/null +++ b/src/tests/config/disabled_function_local_var.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("phpinfo").var("b").value("1337").drop(); | ||
| 2 | sp.disable_functions.function("strlen").var("a").value("1337").drop(); | ||
diff --git a/src/tests/config/disabled_function_super_global_var.ini b/src/tests/config/disabled_function_super_global_var.ini new file mode 100644 index 0000000..e0c87e1 --- /dev/null +++ b/src/tests/config/disabled_function_super_global_var.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("strlen").var("_GET[bla]").value("test2").drop(); | |||
diff --git a/src/tests/config/disabled_functions.ini b/src/tests/config/disabled_functions.ini new file mode 100644 index 0000000..cf54164 --- /dev/null +++ b/src/tests/config/disabled_functions.ini | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | sp.disable_functions.function("system").drop(); | ||
| 2 | sp.disable_functions.function("vprintf").hash("123456789").drop(); | ||
| 3 | sp.disable_functions.function("printf").disable().drop(); | ||
| 4 | sp.disable_functions.function("printf").simulation().drop(); | ||
| 5 | sp.disable_functions.function("print").disable().drop(); # this is a comment | ||
| 6 | sp.disable_functions.function_r("^var_dump$").drop(); | ||
| 7 | sp.disable_functions.function("sprintf").filename("wrong file name").drop(); | ||
diff --git a/src/tests/config/disabled_functions_cidr.ini b/src/tests/config/disabled_functions_cidr.ini new file mode 100644 index 0000000..9e527ba --- /dev/null +++ b/src/tests/config/disabled_functions_cidr.ini | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | sp.disable_functions.function("system").drop().cidr("127.0.0.1/8"); | ||
| 2 | sp.disable_functions.function("printf").drop().cidr("10.0.0.1/8"); | ||
| 3 | sp.disable_functions.function("strpos").drop().cidr("2001:0db8:0000:0000:0000:ff00:0042:8329/24"); | ||
| 4 | sp.disable_functions.function("printf").drop().cidr("2002:0db8:0000:0000:0000:ff00:0042:8329/24"); | ||
diff --git a/src/tests/config/disabled_functions_mb.ini b/src/tests/config/disabled_functions_mb.ini new file mode 100644 index 0000000..b6afd97 --- /dev/null +++ b/src/tests/config/disabled_functions_mb.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.disable_functions.function("strlen").drop(); | ||
| 2 | sp.disable_functions.function("mb_strlen").drop(); | ||
diff --git a/src/tests/config/disabled_functions_ret.ini b/src/tests/config/disabled_functions_ret.ini new file mode 100644 index 0000000..2b769a9 --- /dev/null +++ b/src/tests/config/disabled_functions_ret.ini | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | sp.disable_functions.function("testFunction").ret("0").drop().disable(); | ||
| 2 | sp.disable_functions.function("strpos").ret("0").drop().filename_r(".*\\.php"); | ||
| 3 | sp.disable_functions.function_r("str[ia]pos").ret_r("^[^a-z]+$").drop(); | ||
| 4 | sp.disable_functions.function_r("stripos").ret_r("^[^a-z]+").drop(); | ||
| 5 | sp.disable_functions.function("Bob::a").ret("0").drop(); | ||
diff --git a/src/tests/config/disabled_functions_ret_type.ini b/src/tests/config/disabled_functions_ret_type.ini new file mode 100644 index 0000000..56c8e57 --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("strpos").ret_type("false").drop().alias("Return value is FALSE"); | |||
diff --git a/src/tests/config/disabled_functions_ret_type_double.ini b/src/tests/config/disabled_functions_ret_type_double.ini new file mode 100644 index 0000000..a1239d8 --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type_double.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("cos").ret_type("double").drop().alias("Return value is a double"); | |||
diff --git a/src/tests/config/disabled_functions_ret_type_long.ini b/src/tests/config/disabled_functions_ret_type_long.ini new file mode 100644 index 0000000..6cccd4d --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type_long.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("strlen").ret_type("long").drop().alias("Return value is a long"); | |||
diff --git a/src/tests/config/disabled_functions_ret_type_resource.ini b/src/tests/config/disabled_functions_ret_type_resource.ini new file mode 100644 index 0000000..e81cf2c --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type_resource.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("fopen").ret_type("resource").drop().alias("Return value is a resource"); | |||
diff --git a/src/tests/config/disabled_functions_ret_type_str.ini b/src/tests/config/disabled_functions_ret_type_str.ini new file mode 100644 index 0000000..b3ff050 --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type_str.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("substr").ret_type("string").drop().alias("Return value is a string"); | |||
diff --git a/src/tests/config/disabled_functions_ret_type_true.ini b/src/tests/config/disabled_functions_ret_type_true.ini new file mode 100644 index 0000000..02a37dd --- /dev/null +++ b/src/tests/config/disabled_functions_ret_type_true.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("is_numeric").ret_type("true").drop().alias("Return value is a true"); | |||
diff --git a/src/tests/config/disabled_functions_retval.ini b/src/tests/config/disabled_functions_retval.ini new file mode 100644 index 0000000..20422e4 --- /dev/null +++ b/src/tests/config/disabled_functions_retval.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("str_repeat").ret("fufufu").drop(); | |||
diff --git a/src/tests/config/disabled_functions_retval_rx.ini b/src/tests/config/disabled_functions_retval_rx.ini new file mode 100644 index 0000000..ca2bce3 --- /dev/null +++ b/src/tests/config/disabled_functions_retval_rx.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("str_repeat").ret_r("(fu){3}").drop(); | |||
diff --git a/src/tests/config/disabled_functions_zero_cidr.ini b/src/tests/config/disabled_functions_zero_cidr.ini new file mode 100644 index 0000000..bba1af9 --- /dev/null +++ b/src/tests/config/disabled_functions_zero_cidr.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().cidr("0.0.0.0/0"); | |||
diff --git a/src/tests/config/dump_request.ini b/src/tests/config/dump_request.ini new file mode 100644 index 0000000..8c595f9 --- /dev/null +++ b/src/tests/config/dump_request.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().dump("./dump_results/"); | |||
diff --git a/src/tests/config/dump_request_invalid_folder.ini b/src/tests/config/dump_request_invalid_folder.ini new file mode 100644 index 0000000..b5ae154 --- /dev/null +++ b/src/tests/config/dump_request_invalid_folder.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.disable_functions.function("system").drop().dump("/root/NON_EXISTENT/FOLDER/PLEASE/"); | |||
diff --git a/src/tests/config/empty.ini b/src/tests/config/empty.ini new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/tests/config/empty.ini | |||
diff --git a/src/tests/config/empty_conf.ini b/src/tests/config/empty_conf.ini new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/tests/config/empty_conf.ini | |||
diff --git a/src/tests/config/encryption_key_only.ini b/src/tests/config/encryption_key_only.ini new file mode 100644 index 0000000..7de4438 --- /dev/null +++ b/src/tests/config/encryption_key_only.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.global.secret_key("abcdef"); | |||
diff --git a/src/tests/config/global_strict.ini b/src/tests/config/global_strict.ini new file mode 100644 index 0000000..2bc2bdc --- /dev/null +++ b/src/tests/config/global_strict.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.global_strict.enable(); | |||
diff --git a/src/tests/config/global_strict_disabled.ini b/src/tests/config/global_strict_disabled.ini new file mode 100644 index 0000000..2e68471 --- /dev/null +++ b/src/tests/config/global_strict_disabled.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.global_strict.disable(); | |||
diff --git a/src/tests/config/harden_rand.ini b/src/tests/config/harden_rand.ini new file mode 100644 index 0000000..89e19be --- /dev/null +++ b/src/tests/config/harden_rand.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.harden_random.enable(); | |||
diff --git a/src/tests/config/upload_validation.ini b/src/tests/config/upload_validation.ini new file mode 100644 index 0000000..0646134 --- /dev/null +++ b/src/tests/config/upload_validation.ini | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | sp.upload_validation.script("tests/upload_ko.sh"); | ||
| 2 | sp.upload_validation.enable(); | ||
diff --git a/src/tests/config/upload_validation_invalid.ini b/src/tests/config/upload_validation_invalid.ini new file mode 100644 index 0000000..7a638a1 --- /dev/null +++ b/src/tests/config/upload_validation_invalid.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("./tests/data/upload_invalid.sh").enable(); | |||
diff --git a/src/tests/config/upload_validation_ko.ini b/src/tests/config/upload_validation_ko.ini new file mode 100644 index 0000000..b15977f --- /dev/null +++ b/src/tests/config/upload_validation_ko.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("./tests/data/upload_ko.sh").enable(); | |||
diff --git a/src/tests/config/upload_validation_ko_simulation.ini b/src/tests/config/upload_validation_ko_simulation.ini new file mode 100644 index 0000000..da56439 --- /dev/null +++ b/src/tests/config/upload_validation_ko_simulation.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("./tests/data/upload_ko.sh").enable().simulation(); | |||
diff --git a/src/tests/config/upload_validation_no_exist.ini b/src/tests/config/upload_validation_no_exist.ini new file mode 100644 index 0000000..24f81a5 --- /dev/null +++ b/src/tests/config/upload_validation_no_exist.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("fufufufufu").enable(); | |||
diff --git a/src/tests/config/upload_validation_non_exec.ini b/src/tests/config/upload_validation_non_exec.ini new file mode 100644 index 0000000..bdf0a57 --- /dev/null +++ b/src/tests/config/upload_validation_non_exec.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("tests/data/upload_no_exec.sh").enable(); | |||
diff --git a/src/tests/config/upload_validation_ok.ini b/src/tests/config/upload_validation_ok.ini new file mode 100644 index 0000000..5df8db8 --- /dev/null +++ b/src/tests/config/upload_validation_ok.ini | |||
| @@ -0,0 +1 @@ | |||
| sp.upload_validation.script("./tests/data/upload_ok.sh").enable(); | |||
diff --git a/src/tests/data/upload_invalid.sh b/src/tests/data/upload_invalid.sh new file mode 100755 index 0000000..e5eb0c6 --- /dev/null +++ b/src/tests/data/upload_invalid.sh | |||
| @@ -0,0 +1 @@ | |||
| lulz | |||
diff --git a/src/tests/data/upload_ko.sh b/src/tests/data/upload_ko.sh new file mode 100755 index 0000000..c4cacdc --- /dev/null +++ b/src/tests/data/upload_ko.sh | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | exit 1; | ||
diff --git a/src/tests/data/upload_no_exec.sh b/src/tests/data/upload_no_exec.sh new file mode 100644 index 0000000..6b9cafa --- /dev/null +++ b/src/tests/data/upload_no_exec.sh | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | exit 0; | ||
diff --git a/src/tests/data/upload_ok.sh b/src/tests/data/upload_ok.sh new file mode 100755 index 0000000..6b9cafa --- /dev/null +++ b/src/tests/data/upload_ok.sh | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | exit 0; | ||
diff --git a/src/tests/deny_writable_execution.phpt b/src/tests/deny_writable_execution.phpt new file mode 100644 index 0000000..2870561 --- /dev/null +++ b/src/tests/deny_writable_execution.phpt | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | --TEST-- | ||
| 2 | Readonly execution attempt | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) print "skip"; | ||
| 6 | |||
| 7 | $filename = __DIR__ . '/test.txt'; | ||
| 8 | |||
| 9 | @unlink($filename); | ||
| 10 | |||
| 11 | file_put_contents($filename, 'a'); | ||
| 12 | chmod($filename, 0400); | ||
| 13 | |||
| 14 | if (is_writable($filename)) print "skip"; | ||
| 15 | @unlink($filename); | ||
| 16 | ?> | ||
| 17 | --INI-- | ||
| 18 | sp.configuration_file={PWD}/config/config_disable_writable.ini | ||
| 19 | --FILE-- | ||
| 20 | <?php | ||
| 21 | $dir = __DIR__; | ||
| 22 | |||
| 23 | // just in case | ||
| 24 | @unlink("$dir/non_writable_file.txt"); | ||
| 25 | @unlink("$dir/writable_file.txt"); | ||
| 26 | |||
| 27 | file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";'); | ||
| 28 | file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";'); | ||
| 29 | chmod("$dir/non_writable_file.txt", 0400); | ||
| 30 | chmod("$dir/writable_file.txt", 0777); | ||
| 31 | include "$dir/non_writable_file.txt"; | ||
| 32 | include "$dir/writable_file.txt"; | ||
| 33 | ?> | ||
| 34 | --EXPECTF-- | ||
| 35 | Code execution within a non-writable file. | ||
| 36 | [snuffleupagus][0.0.0.0][readonly_exec][drop] Attempted execution of a writable file (%a/writable_file.txt). | ||
| 37 | --CLEAN-- | ||
| 38 | <?php | ||
| 39 | $dir = __DIR__; | ||
| 40 | chmod("$dir/non_writable_file.txt", 0777); | ||
| 41 | chmod("$dir/writable_file.txt", 0777); | ||
| 42 | unlink("$dir/non_writable_file.txt"); | ||
| 43 | unlink("$dir/writable_file.txt"); | ||
| 44 | ?> \ No newline at end of file | ||
diff --git a/src/tests/deny_writable_execution_disabled.phpt b/src/tests/deny_writable_execution_disabled.phpt new file mode 100644 index 0000000..6d1233b --- /dev/null +++ b/src/tests/deny_writable_execution_disabled.phpt | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | --TEST-- | ||
| 2 | Readonly execution attempt | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disable_writable_disabled.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | $dir = __DIR__; | ||
| 10 | |||
| 11 | // just in case | ||
| 12 | @unlink("$dir/non_writable_file.txt"); | ||
| 13 | @unlink("$dir/writable_file.txt"); | ||
| 14 | |||
| 15 | file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";'); | ||
| 16 | file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";'); | ||
| 17 | chmod("$dir/writable_file.txt", 0777); | ||
| 18 | chmod("$dir/non_writable_file.txt", 0400); | ||
| 19 | include "$dir/writable_file.txt"; | ||
| 20 | include "$dir/non_writable_file.txt"; | ||
| 21 | ?> | ||
| 22 | --EXPECT-- | ||
| 23 | Code execution within a writable file. | ||
| 24 | Code execution within a non-writable file. | ||
| 25 | --CLEAN-- | ||
| 26 | <?php | ||
| 27 | $dir = __DIR__; | ||
| 28 | chmod("$dir/non_writable_file.txt", 0777); | ||
| 29 | chmod("$dir/writable_file.txt", 0777); | ||
| 30 | unlink("$dir/non_writable_file.txt"); | ||
| 31 | unlink("$dir/writable_file.txt"); | ||
| 32 | ?> \ No newline at end of file | ||
diff --git a/src/tests/deny_writable_execution_simulation.phpt b/src/tests/deny_writable_execution_simulation.phpt new file mode 100644 index 0000000..3278be8 --- /dev/null +++ b/src/tests/deny_writable_execution_simulation.phpt | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | --TEST-- | ||
| 2 | Readonly execution attempt (simulation mode) | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) print "skip"; | ||
| 6 | |||
| 7 | $filename = __DIR__ . '/test.txt'; | ||
| 8 | |||
| 9 | @unlink($filename); | ||
| 10 | |||
| 11 | file_put_contents($filename, 'a'); | ||
| 12 | chmod($filename, 0400); | ||
| 13 | |||
| 14 | if (is_writable($filename)) print "skip";; | ||
| 15 | @unlink($filename); | ||
| 16 | ?> | ||
| 17 | --INI-- | ||
| 18 | sp.configuration_file={PWD}/config/config_disable_writable_simulation.ini | ||
| 19 | --FILE-- | ||
| 20 | <?php | ||
| 21 | $dir = __DIR__; | ||
| 22 | |||
| 23 | // just in case | ||
| 24 | @unlink("$dir/non_writable_file.txt"); | ||
| 25 | @unlink("$dir/writable_file.txt"); | ||
| 26 | |||
| 27 | file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";'); | ||
| 28 | file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";'); | ||
| 29 | chmod("$dir/writable_file.txt", 0777); | ||
| 30 | chmod("$dir/non_writable_file.txt", 0400); | ||
| 31 | include "$dir/writable_file.txt"; | ||
| 32 | include "$dir/non_writable_file.txt"; | ||
| 33 | ?> | ||
| 34 | --EXPECTF-- | ||
| 35 | [snuffleupagus][0.0.0.0][readonly_exec][notice] Attempted execution of a writable file (%a/writable_file.txt). | ||
| 36 | Code execution within a writable file. | ||
| 37 | Code execution within a non-writable file. | ||
| 38 | --CLEAN-- | ||
| 39 | <?php | ||
| 40 | $dir = __DIR__; | ||
| 41 | chmod("$dir/non_writable_file.txt", 0777); | ||
| 42 | chmod("$dir/writable_file.txt", 0777); | ||
| 43 | unlink("$dir/non_writable_file.txt"); | ||
| 44 | unlink("$dir/writable_file.txt"); | ||
| 45 | ?> \ No newline at end of file | ||
diff --git a/src/tests/disable_xxe_dom.phpt b/src/tests/disable_xxe_dom.phpt new file mode 100644 index 0000000..47f3db3 --- /dev/null +++ b/src/tests/disable_xxe_dom.phpt | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable XXE | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) die "skip"; | ||
| 6 | if (!extension_loaded("dom")) die "skip"; | ||
| 7 | ?> | ||
| 8 | --INI-- | ||
| 9 | extension=`php-config --extension-dir`/dom.so | ||
| 10 | sp.configuration_file={PWD}/config/disable_xxe.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | $dir = __DIR__; | ||
| 14 | $content = 'WARNING, external entity loaded!'; | ||
| 15 | file_put_contents('content.txt', $content); | ||
| 16 | |||
| 17 | $xml = <<<EOD | ||
| 18 | <?xml version="1.0"?> | ||
| 19 | <!DOCTYPE root | ||
| 20 | [ | ||
| 21 | <!ENTITY foo SYSTEM "file://$dir/content.txt"> | ||
| 22 | ]> | ||
| 23 | <test><testing>&foo;</testing></test> | ||
| 24 | EOD; | ||
| 25 | |||
| 26 | file_put_contents('content.xml', $xml); | ||
| 27 | |||
| 28 | libxml_disable_entity_loader(true); | ||
| 29 | $dom = new DOMDocument('1.0'); | ||
| 30 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 31 | printf("libxml_disable_entity to true: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 32 | |||
| 33 | libxml_disable_entity_loader(false); | ||
| 34 | $dom = new DOMDocument('1.0'); | ||
| 35 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 36 | printf("libxml_disable_entity to false: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 37 | |||
| 38 | $xml = "<test><testing>foo</testing></test>"; | ||
| 39 | file_put_contents('content.xml', $xml); | ||
| 40 | |||
| 41 | libxml_disable_entity_loader(false); | ||
| 42 | $dom = new DOMDocument('1.0'); | ||
| 43 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 44 | printf("without xxe: %s", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 45 | |||
| 46 | ?> | ||
| 47 | --EXPECTF-- | ||
| 48 | Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file://%a/content.txt" in %a/disable_xxe_dom.php on line %d | ||
| 49 | |||
| 50 | Warning: DOMDocument::loadXML(): Failure to process entity foo in Entity, line: %d in %a/disable_xxe_dom.php on line %d | ||
| 51 | |||
| 52 | Warning: DOMDocument::loadXML(): Entity 'foo' not defined in Entity, line: %d in %a/disable_xxe_dom.php on line %d | ||
| 53 | |||
| 54 | Notice: Trying to get property of non-object in %a/disable_xxe_dom.php on line %d | ||
| 55 | libxml_disable_entity to true: | ||
| 56 | |||
| 57 | Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file://%a/content.txt" in %a/disable_xxe_dom.php on line %d | ||
| 58 | |||
| 59 | Warning: DOMDocument::loadXML(): Failure to process entity foo in Entity, line: %d in %a/disable_xxe_dom.php on line %d | ||
| 60 | |||
| 61 | Warning: DOMDocument::loadXML(): Entity 'foo' not defined in Entity, line: %d in %a/disable_xxe_dom.php on line %d | ||
| 62 | |||
| 63 | Notice: Trying to get property of non-object in %a/disable_xxe_dom.php on line %d | ||
| 64 | libxml_disable_entity to false: | ||
| 65 | without xxe: foo | ||
| 66 | --CLEAN-- | ||
| 67 | <?php | ||
| 68 | $dir = __DIR__; | ||
| 69 | unlink($dir . "content.xml"); | ||
| 70 | unlink($dir . "content.txt"); | ||
| 71 | ?> | ||
diff --git a/src/tests/disable_xxe_dom_disabled.phpt b/src/tests/disable_xxe_dom_disabled.phpt new file mode 100644 index 0000000..b89b595 --- /dev/null +++ b/src/tests/disable_xxe_dom_disabled.phpt | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable XXE | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) die "skip"; | ||
| 6 | if (!extension_loaded("dom")) die "skip"; | ||
| 7 | ?> | ||
| 8 | --INI-- | ||
| 9 | extension=`php-config --extension-dir`/dom.so | ||
| 10 | sp.configuration_file={PWD}/config/disable_xxe_disable.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | $dir = __DIR__; | ||
| 14 | $content = '<content>WARNING, external entity loaded!</content>'; | ||
| 15 | file_put_contents($dir . '/content.txt', $content); | ||
| 16 | |||
| 17 | $xml = <<<EOD | ||
| 18 | <?xml version="1.0"?> | ||
| 19 | <!DOCTYPE root | ||
| 20 | [ | ||
| 21 | <!ENTITY foo SYSTEM "file://$dir/content.txt"> | ||
| 22 | ]> | ||
| 23 | <test><testing>&foo;</testing></test> | ||
| 24 | EOD; | ||
| 25 | |||
| 26 | file_put_contents($dir . '/content.xml', $xml); | ||
| 27 | |||
| 28 | libxml_disable_entity_loader(true); | ||
| 29 | $dom = new DOMDocument('1.0'); | ||
| 30 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 31 | printf("libxml_disable_entity to true: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 32 | |||
| 33 | libxml_disable_entity_loader(false); | ||
| 34 | $dom = new DOMDocument('1.0'); | ||
| 35 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 36 | printf("libxml_disable_entity to false: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 37 | |||
| 38 | $xml = "<test><testing>foo</testing></test>"; | ||
| 39 | file_put_contents('content.xml', $xml); | ||
| 40 | |||
| 41 | libxml_disable_entity_loader(false); | ||
| 42 | $dom = new DOMDocument('1.0'); | ||
| 43 | $dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); | ||
| 44 | printf("without xxe: %s", $dom->getElementsByTagName('testing')->item(0)->nodeValue); | ||
| 45 | |||
| 46 | ?> | ||
| 47 | --EXPECTF-- | ||
| 48 | libxml_disable_entity to true: WARNING, external entity loaded! | ||
| 49 | libxml_disable_entity to false: WARNING, external entity loaded! | ||
| 50 | without xxe: foo | ||
| 51 | --CLEAN-- | ||
| 52 | <?php | ||
| 53 | $dir = __DIR__; | ||
| 54 | unlink($dir . "/content.xml"); | ||
| 55 | unlink($dir . "/content.txt"); | ||
| 56 | ?> | ||
diff --git a/src/tests/disable_xxe_simplexml.phpt b/src/tests/disable_xxe_simplexml.phpt new file mode 100644 index 0000000..54404a3 --- /dev/null +++ b/src/tests/disable_xxe_simplexml.phpt | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable XXE | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) die "skip"; | ||
| 6 | if (!extension_loaded("simplexml")) die "skip"; | ||
| 7 | ?> | ||
| 8 | --INI-- | ||
| 9 | extension=`php-config --extension-dir`/simplexml.so | ||
| 10 | sp.configuration_file={PWD}/config/disable_xxe.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | $dir = __DIR__; | ||
| 14 | $content = 'WARNING, external entity loaded!'; | ||
| 15 | file_put_contents('content.txt', $content); | ||
| 16 | |||
| 17 | $xml = <<<EOD | ||
| 18 | <?xml version="1.0"?> | ||
| 19 | <!DOCTYPE root | ||
| 20 | [ | ||
| 21 | <!ENTITY foo SYSTEM "file://$dir/content.txt"> | ||
| 22 | ]> | ||
| 23 | <test><testing>&foo;</testing></test> | ||
| 24 | EOD; | ||
| 25 | |||
| 26 | file_put_contents('content.xml', $xml); | ||
| 27 | |||
| 28 | libxml_disable_entity_loader(true); | ||
| 29 | $doc = new SimpleXMLElement($xml); | ||
| 30 | printf("libxml_disable_entity to true: %s\n", $doc->testing); | ||
| 31 | |||
| 32 | libxml_disable_entity_loader(false); | ||
| 33 | $doc = new SimpleXMLElement($xml); | ||
| 34 | printf("libxml_disable_entity to false: %s\n", $doc->testing); | ||
| 35 | |||
| 36 | $xml = "<test><testing>foo</testing></test>"; | ||
| 37 | file_put_contents('content.xml', $xml); | ||
| 38 | |||
| 39 | $doc = new SimpleXMLElement($xml); | ||
| 40 | printf("without xxe: %s", $doc->testing); | ||
| 41 | |||
| 42 | ?> | ||
| 43 | --EXPECT-- | ||
| 44 | libxml_disable_entity to true: | ||
| 45 | libxml_disable_entity to false: | ||
| 46 | without xxe: foo | ||
| 47 | --CLEAN-- | ||
| 48 | <?php | ||
| 49 | $dir = __DIR__; | ||
| 50 | unlink($dir . "/content.xml"); | ||
| 51 | unlink($dir . "/content.txt"); | ||
| 52 | ?> | ||
diff --git a/src/tests/disable_xxe_simplexml_oop.phpt b/src/tests/disable_xxe_simplexml_oop.phpt new file mode 100644 index 0000000..62762eb --- /dev/null +++ b/src/tests/disable_xxe_simplexml_oop.phpt | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable XXE | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) die "skip"; | ||
| 6 | if (!extension_loaded("simplexml")) die "skip"; | ||
| 7 | ?> | ||
| 8 | --INI-- | ||
| 9 | extension=`php-config --extension-dir`/simplexml.so | ||
| 10 | sp.configuration_file={PWD}/config/disable_xxe.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | $dir = __DIR__; | ||
| 14 | $content = 'WARNING, external entity loaded!'; | ||
| 15 | file_put_contents('content.txt', $content); | ||
| 16 | |||
| 17 | $xml = <<<EOD | ||
| 18 | <?xml version="1.0"?> | ||
| 19 | <!DOCTYPE root | ||
| 20 | [ | ||
| 21 | <!ENTITY foo SYSTEM "file://$dir/content.txt"> | ||
| 22 | ]> | ||
| 23 | <test><testing>&foo;</testing></test> | ||
| 24 | EOD; | ||
| 25 | |||
| 26 | file_put_contents('content.xml', $xml); | ||
| 27 | |||
| 28 | libxml_disable_entity_loader(true); | ||
| 29 | $doc = simplexml_load_string($xml); | ||
| 30 | printf("libxml_disable_entity to true: %s\n", $doc->testing); | ||
| 31 | |||
| 32 | libxml_disable_entity_loader(false); | ||
| 33 | $doc = simplexml_load_string($xml); | ||
| 34 | printf("libxml_disable_entity to false: %s\n", $doc->testing); | ||
| 35 | |||
| 36 | $xml = "<test><testing>foo</testing></test>"; | ||
| 37 | file_put_contents('content.xml', $xml); | ||
| 38 | |||
| 39 | $doc = simplexml_load_string($xml); | ||
| 40 | printf("without xxe: %s", $doc->testing); | ||
| 41 | |||
| 42 | ?> | ||
| 43 | --EXPECT-- | ||
| 44 | libxml_disable_entity to true: | ||
| 45 | libxml_disable_entity to false: | ||
| 46 | without xxe: foo | ||
| 47 | --CLEAN-- | ||
| 48 | <?php | ||
| 49 | $dir = __DIR__; | ||
| 50 | unlink($dir . "/content.xml"); | ||
| 51 | unlink($dir . "/content.txt"); | ||
| 52 | ?> | ||
diff --git a/src/tests/disable_xxe_xml_parse.phpt b/src/tests/disable_xxe_xml_parse.phpt new file mode 100644 index 0000000..944bc38 --- /dev/null +++ b/src/tests/disable_xxe_xml_parse.phpt | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable XXE | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) die "skip"; | ||
| 6 | if (!extension_loaded("xml")) die "skip"; | ||
| 7 | ?> | ||
| 8 | --INI-- | ||
| 9 | extension=`php-config --extension-dir`/xml.so | ||
| 10 | sp.configuration_file={PWD}/config/disable_xxe.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | $dir = __DIR__; | ||
| 14 | $content = 'WARNING, external entity loaded!'; | ||
| 15 | file_put_contents('content.txt', $content); | ||
| 16 | |||
| 17 | $xml = <<<EOD | ||
| 18 | <?xml version="1.0"?> | ||
| 19 | <!DOCTYPE root | ||
| 20 | [ | ||
| 21 | <!ENTITY foo SYSTEM "file://$dir/content.txt"> | ||
| 22 | ]> | ||
| 23 | <test><testing>&foo;</testing></test> | ||
| 24 | EOD; | ||
| 25 | |||
| 26 | file_put_contents('content.xml', $xml); | ||
| 27 | |||
| 28 | function create_parser() { | ||
| 29 | $parser = xml_parser_create(); | ||
| 30 | xml_set_element_handler( | ||
| 31 | $parser, | ||
| 32 | function($parser, $name, array $attributes) { | ||
| 33 | var_dump($name); | ||
| 34 | echo "\n"; | ||
| 35 | var_dump($attributes); | ||
| 36 | }, | ||
| 37 | function($parser, $name) { | ||
| 38 | var_dump($name); | ||
| 39 | } | ||
| 40 | ); | ||
| 41 | |||
| 42 | xml_set_character_data_handler( | ||
| 43 | $parser, | ||
| 44 | function ($parser, $text){ | ||
| 45 | echo 'text' . $text; | ||
| 46 | } | ||
| 47 | ); | ||
| 48 | |||
| 49 | return $parser; | ||
| 50 | } | ||
| 51 | |||
| 52 | libxml_disable_entity_loader(true); | ||
| 53 | $parser = create_parser(); | ||
| 54 | $doc = xml_parse($parser, $xml, true); | ||
| 55 | xml_parser_free($parser); | ||
| 56 | |||
| 57 | libxml_disable_entity_loader(false); | ||
| 58 | $parser = create_parser(); | ||
| 59 | $doc = xml_parse($parser, $xml, true); | ||
| 60 | xml_parser_free($parser); | ||
| 61 | |||
| 62 | $xml = "<test><testing>foo</testing></test>"; | ||
| 63 | file_put_contents('content.xml', $xml); | ||
| 64 | $parser = create_parser(); | ||
| 65 | $doc = xml_parse($parser, $xml, true); | ||
| 66 | xml_parser_free($parser); | ||
| 67 | |||
| 68 | --EXPECT-- | ||
| 69 | string(4) "TEST" | ||
| 70 | |||
| 71 | array(0) { | ||
| 72 | } | ||
| 73 | string(7) "TESTING" | ||
| 74 | |||
| 75 | array(0) { | ||
| 76 | } | ||
| 77 | string(7) "TESTING" | ||
| 78 | string(4) "TEST" | ||
| 79 | string(4) "TEST" | ||
| 80 | |||
| 81 | array(0) { | ||
| 82 | } | ||
| 83 | string(7) "TESTING" | ||
| 84 | |||
| 85 | array(0) { | ||
| 86 | } | ||
| 87 | string(7) "TESTING" | ||
| 88 | string(4) "TEST" | ||
| 89 | string(4) "TEST" | ||
| 90 | |||
| 91 | array(0) { | ||
| 92 | } | ||
| 93 | string(7) "TESTING" | ||
| 94 | |||
| 95 | array(0) { | ||
| 96 | } | ||
| 97 | textfoostring(7) "TESTING" | ||
| 98 | string(4) "TEST" | ||
| 99 | --CLEAN-- | ||
| 100 | <?php | ||
| 101 | $dir = __DIR__; | ||
| 102 | unlink($dir . "/content.xml"); | ||
| 103 | unlink($dir . "/content.txt"); | ||
| 104 | ?> | ||
diff --git a/src/tests/disabled_function_local_var.phpt b/src/tests/disabled_function_local_var.phpt new file mode 100644 index 0000000..3142039 --- /dev/null +++ b/src/tests/disabled_function_local_var.phpt | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - match on a local variable | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_function_local_var.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | $a = 1338; | ||
| 10 | function test(){ | ||
| 11 | echo strlen("id") . "\n"; | ||
| 12 | } | ||
| 13 | echo "Value of a: $a\n"; | ||
| 14 | test(); | ||
| 15 | |||
| 16 | $a = 1337; | ||
| 17 | echo "Value of a: $a\n"; | ||
| 18 | test(); | ||
| 19 | ?> | ||
| 20 | --EXPECTF-- | ||
| 21 | Value of a: 1338 | ||
| 22 | 2 | ||
| 23 | Value of a: 1337 | ||
| 24 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_function_local_var.php:%d has been disabled. \ No newline at end of file | ||
diff --git a/src/tests/disabled_function_super_global_var.phpt b/src/tests/disabled_function_super_global_var.phpt new file mode 100644 index 0000000..d41897a --- /dev/null +++ b/src/tests/disabled_function_super_global_var.phpt | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - match on a super global | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_function_super_global_var.ini | ||
| 7 | --GET-- | ||
| 8 | bla=test | ||
| 9 | --FILE-- | ||
| 10 | <?php | ||
| 11 | function test(){ | ||
| 12 | echo strlen($_GET['bla']) . "\n"; | ||
| 13 | } | ||
| 14 | test(); | ||
| 15 | $_GET['bla'] = 'test2'; | ||
| 16 | test(); | ||
| 17 | ?> | ||
| 18 | --EXPECTF-- | ||
| 19 | 4 | ||
| 20 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %s/tests/disabled_function_super_global_var.php:%d has been disabled. | ||
diff --git a/src/tests/disabled_functions.phpt b/src/tests/disabled_functions.phpt new file mode 100644 index 0000000..37da911 --- /dev/null +++ b/src/tests/disabled_functions.phpt | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("id"); | ||
| 10 | printf("printf in simulation mode\n"); | ||
| 11 | print("print in disabled mode\n"); | ||
| 12 | var_dump("this is a super test"); | ||
| 13 | echo strpos("pouet", "o"); | ||
| 14 | ?> | ||
| 15 | --EXPECTF-- | ||
| 16 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions.php:%d has been disabled. | ||
| 17 | [snuffleupagus][0.0.0.0][disabled_function][notice] The call to the function 'printf' in %a/tests/disabled_functions.php:%d has been disabled. | ||
| 18 | printf in simulation mode | ||
| 19 | print in disabled mode | ||
| 20 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'var_dump' in %a/tests/disabled_functions.php:%d has been disabled. | ||
| 21 | 1 | ||
diff --git a/src/tests/disabled_functions_cidr.phpt b/src/tests/disabled_functions_cidr.phpt new file mode 100644 index 0000000..5b13107 --- /dev/null +++ b/src/tests/disabled_functions_cidr.phpt | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --ENV-- | ||
| 6 | return <<<EOF | ||
| 7 | REMOTE_ADDR=127.0.0.1 | ||
| 8 | EOF; | ||
| 9 | --INI-- | ||
| 10 | sp.configuration_file={PWD}/config/disabled_functions_cidr.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | system("echo 42"); | ||
| 14 | printf("1337"); | ||
| 15 | ?> | ||
| 16 | --EXPECTF-- | ||
| 17 | [snuffleupagus][127.0.0.1][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_cidr.php:2 has been disabled. | ||
| 18 | 1337 | ||
diff --git a/src/tests/disabled_functions_cidr_6.phpt b/src/tests/disabled_functions_cidr_6.phpt new file mode 100644 index 0000000..f2c5f5a --- /dev/null +++ b/src/tests/disabled_functions_cidr_6.phpt | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --ENV-- | ||
| 6 | return <<<EOF | ||
| 7 | REMOTE_ADDR=2001:0db8:0000:0000:0000:ff00:0042:8328 | ||
| 8 | EOF; | ||
| 9 | --INI-- | ||
| 10 | sp.configuration_file={PWD}/config/disabled_functions_cidr.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | strpos("a", "b"); | ||
| 14 | printf(1337); | ||
| 15 | ?> | ||
| 16 | --EXPECTF-- | ||
| 17 | [snuffleupagus][2001:0db8:0000:0000:0000:ff00:0042:8328][disabled_function][drop] The call to the function 'strpos' in %a/tests/disabled_functions_cidr_6.php:2 has been disabled. | ||
| 18 | 1337 | ||
diff --git a/src/tests/disabled_functions_filename_r.phpt b/src/tests/disabled_functions_filename_r.phpt new file mode 100644 index 0000000..ed46802 --- /dev/null +++ b/src/tests/disabled_functions_filename_r.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - filename regexp | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_filename_r.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo 42"); | ||
| 10 | shell_exec("echo 43"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | 42 | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'shell_exec' in %a/tests/disabled_functions_filename_r.php:%d has been disabled. \ No newline at end of file | ||
diff --git a/src/tests/disabled_functions_mb.phpt b/src/tests/disabled_functions_mb.phpt new file mode 100644 index 0000000..7089063 --- /dev/null +++ b/src/tests/disabled_functions_mb.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_mb.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strlen("id"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'strlen' in %a/tests/disabled_functions_mb.php:2 has been disabled. | ||
diff --git a/src/tests/disabled_functions_method.phpt b/src/tests/disabled_functions_method.phpt new file mode 100644 index 0000000..33651b7 --- /dev/null +++ b/src/tests/disabled_functions_method.phpt | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_method.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | class AwesomeClass { | ||
| 10 | function method1($a) { | ||
| 11 | echo "method1:" . $a . "\n"; | ||
| 12 | } | ||
| 13 | function method2($a) { | ||
| 14 | echo "method2:" . $a . "\n"; | ||
| 15 | } | ||
| 16 | function method3($a) { | ||
| 17 | echo "method3:" . $a . "\n"; | ||
| 18 | } | ||
| 19 | } | ||
| 20 | |||
| 21 | $c = new AwesomeClass(); | ||
| 22 | $c->method1("pif"); | ||
| 23 | $c->method2("paf"); | ||
| 24 | $c->method3("pouet"); | ||
| 25 | ?> | ||
| 26 | --EXPECTF-- | ||
| 27 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'AwesomeClass::method1' in %a/tests/disabled_functions_method.php:4 has been disabled. | ||
| 28 | method2:paf | ||
| 29 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'AwesomeClass::method3' in %a/tests/disabled_functions_method.php:10 has been disabled, because its argument 'a' content (pouet) matched a rule. | ||
diff --git a/src/tests/disabled_functions_name_r.phpt b/src/tests/disabled_functions_name_r.phpt new file mode 100644 index 0000000..0e29abb --- /dev/null +++ b/src/tests/disabled_functions_name_r.phpt | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_name_r.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo 42"); | ||
| 10 | system("echo 1337"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | 42 | ||
| 14 | 1337 | ||
| 15 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_name_r.php:3, because the return value (1337) of the function 'system' matched a rule. | ||
diff --git a/src/tests/disabled_functions_name_type.phpt b/src/tests/disabled_functions_name_type.phpt new file mode 100644 index 0000000..c5b24d6 --- /dev/null +++ b/src/tests/disabled_functions_name_type.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_name_type.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strcmp("pouet", "pouet") . "\n"; | ||
| 10 | echo strcmp([1,23], "pouet") . "\n"; | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | 0 | ||
| 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. | ||
diff --git a/src/tests/disabled_functions_namespace.phpt b/src/tests/disabled_functions_namespace.phpt new file mode 100644 index 0000000..72c7d0b --- /dev/null +++ b/src/tests/disabled_functions_namespace.phpt | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions: namespaces support isn't implemented now | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_namespace.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | namespace my_super_namespace { | ||
| 10 | function my_function() { | ||
| 11 | echo "1\n"; | ||
| 12 | } | ||
| 13 | } | ||
| 14 | namespace my_second_namespace { | ||
| 15 | function my_function() { | ||
| 16 | echo "2\n"; | ||
| 17 | } | ||
| 18 | } | ||
| 19 | namespace { | ||
| 20 | function my_function() { | ||
| 21 | echo "3\n"; | ||
| 22 | } | ||
| 23 | \strcmp("1", "2"); | ||
| 24 | \my_super_namespace\my_function(); | ||
| 25 | \my_second_namespace\my_function(); | ||
| 26 | my_function(); | ||
| 27 | } | ||
| 28 | ?> | ||
| 29 | --XFAIL-- | ||
| 30 | --EXPECTF-- | ||
| 31 | [snuffleupagus] The call to the function 'strcmp' in %a/tests/disabled_functions_namespace.php:%d has been disabled. | ||
diff --git a/src/tests/disabled_functions_noconf.phpt b/src/tests/disabled_functions_noconf.phpt new file mode 100644 index 0000000..cb13413 --- /dev/null +++ b/src/tests/disabled_functions_noconf.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/empty.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "o"); | ||
| 10 | ?> | ||
| 11 | --EXPECT-- | ||
| 12 | 1 | ||
diff --git a/src/tests/disabled_functions_nul_byte.phpt b/src/tests/disabled_functions_nul_byte.phpt new file mode 100644 index 0000000..95e87de --- /dev/null +++ b/src/tests/disabled_functions_nul_byte.phpt | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions with nul byte | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_nul_byte.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("\0id"); | ||
| 10 | system("id"); | ||
| 11 | |||
| 12 | ?> | ||
| 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. | ||
| 15 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_nul_byte.php:3 has been disabled, because its argument 'command' content (id) matched a rule. \ No newline at end of file | ||
diff --git a/src/tests/disabled_functions_param.phpt b/src/tests/disabled_functions_param.phpt new file mode 100644 index 0000000..2309217 --- /dev/null +++ b/src/tests/disabled_functions_param.phpt | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("id"); | ||
| 10 | system("echo win"); | ||
| 11 | var_dump(array_sum([1,2,3,4,5])); | ||
| 12 | shell_exec("id"); | ||
| 13 | echo shell_exec("echo 42"); | ||
| 14 | strcmp("bla", "ble"); | ||
| 15 | strncmp("bla", "ble", 2); | ||
| 16 | ?> | ||
| 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'. | ||
| 19 | win | ||
| 20 | int(15) | ||
| 21 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'shell_exec' in %a/disabled_functions_param.php:5 has been disabled, because its argument 'cmd' content (id) matched the rule '3'. | ||
| 22 | 42 | ||
| 23 | [snuffleupagus][0.0.0.0][disabled_function][notice] The call to the function 'strcmp' in %a/tests/disabled_functions_param.php:7 has been disabled, because its argument 'str1' content (bla) matched the rule '5'. | ||
| 24 | [snuffleupagus][0.0.0.0][disabled_function][notice] The call to the function 'strncmp' in %a/tests/disabled_functions_param.php:8 has been disabled, because its argument 'str1' content (bla) matched a rule. | ||
diff --git a/src/tests/disabled_functions_param_alias.phpt b/src/tests/disabled_functions_param_alias.phpt new file mode 100644 index 0000000..fe3d1c1 --- /dev/null +++ b/src/tests/disabled_functions_param_alias.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - alias | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_alias.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("id"); | ||
| 10 | shell_exec("id"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_param_alias.php:2 has been disabled, because of the the rule '1'. | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][notice] The call to the function 'shell_exec' in %a/tests/disabled_functions_param_alias.php:3 has been disabled, because of the the rule '2'. | ||
diff --git a/src/tests/disabled_functions_param_allow.phpt b/src/tests/disabled_functions_param_allow.phpt new file mode 100644 index 0000000..b6ff01a --- /dev/null +++ b/src/tests/disabled_functions_param_allow.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - allow | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_allow.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo win"); | ||
| 10 | system("id"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | win | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_param_allow.php:3 has been disabled. \ No newline at end of file | ||
diff --git a/src/tests/disabled_functions_param_array.phpt b/src/tests/disabled_functions_param_array.phpt new file mode 100644 index 0000000..6596d1a --- /dev/null +++ b/src/tests/disabled_functions_param_array.phpt | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_array.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | function foo($arr) { | ||
| 10 | echo $arr["a"]."\n"; | ||
| 11 | } | ||
| 12 | $a=Array("a"=>"test1"); | ||
| 13 | foo($a); | ||
| 14 | $a=Array("a"=>"abcd"); | ||
| 15 | foo($a); | ||
| 16 | $a=Array("a"=>"abcde"); | ||
| 17 | foo($a); | ||
| 18 | $a=Array("bla"=>"abcdef"); | ||
| 19 | foo($a); | ||
| 20 | $a=Array("bla"=>"aaa", "a"=>"eee" ); | ||
| 21 | foo($a); | ||
| 22 | $a=Array("test"=>"aaa", "a"=>"fff" ); | ||
| 23 | foo($a); | ||
| 24 | $a=Array("test2"=>Array("foo"=>Array("lol"=>"bbb")), "a"=>"cccc"); | ||
| 25 | foo($a); | ||
| 26 | $a=Array("test2"=>Array("foo"=>Array("lol"=>"aaa")), "a"=>"dddd"); | ||
| 27 | foo($a); | ||
| 28 | ?> | ||
| 29 | --EXPECTF-- | ||
| 30 | test1 | ||
| 31 | [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'. | ||
| 32 | abcde | ||
| 33 | [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 '2'. | ||
| 34 | eee | ||
| 35 | [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 '3'. | ||
| 36 | cccc | ||
| 37 | [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 '4'. | ||
diff --git a/src/tests/disabled_functions_param_int.phpt b/src/tests/disabled_functions_param_int.phpt new file mode 100644 index 0000000..3b2cc08 --- /dev/null +++ b/src/tests/disabled_functions_param_int.phpt | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_int.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | function foobar($id) { | ||
| 10 | echo $id."\n"; | ||
| 11 | } | ||
| 12 | foobar(1); | ||
| 13 | foobar(42); | ||
| 14 | foobar(1337); | ||
| 15 | foobar(13374242); | ||
| 16 | foobar(0x2A); | ||
| 17 | foobar("10"); | ||
| 18 | ?> | ||
| 19 | --EXPECTF-- | ||
| 20 | 1 | ||
| 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. | ||
| 22 | [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 (1337) matched a rule. | ||
| 23 | [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 (13374242) matched a rule. | ||
| 24 | [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. | ||
| 25 | 10 | ||
diff --git a/src/tests/disabled_functions_param_r.phpt b/src/tests/disabled_functions_param_r.phpt new file mode 100644 index 0000000..3708881 --- /dev/null +++ b/src/tests/disabled_functions_param_r.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_r.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("id"); | ||
| 10 | system("echo win"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_param_r.php:2 has been disabled, because its argument 'command' content (id) matched a rule. | ||
| 14 | win | ||
diff --git a/src/tests/disabled_functions_param_str_representation.phpt b/src/tests/disabled_functions_param_str_representation.phpt new file mode 100644 index 0000000..7cbdc0f --- /dev/null +++ b/src/tests/disabled_functions_param_str_representation.phpt | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - casting various types to string internally | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_str_representation.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo var_export(true) . "\n"; | ||
| 10 | echo var_export(false) . "\n"; | ||
| 11 | echo var_export(null) . "\n"; | ||
| 12 | echo var_export(1) . "\n"; | ||
| 13 | echo var_export(1.0) . "\n"; | ||
| 14 | function f(&$a) { | ||
| 15 | echo var_export($a) . "\n"; | ||
| 16 | } | ||
| 17 | $a = 123; f($a); | ||
| 18 | ?> | ||
| 19 | --EXPECTF-- | ||
| 20 | true | ||
| 21 | false | ||
| 22 | NULL | ||
| 23 | 1 | ||
| 24 | 1.0 | ||
| 25 | 123 | ||
diff --git a/src/tests/disabled_functions_parse_class.phpt b/src/tests/disabled_functions_parse_class.phpt new file mode 100644 index 0000000..af9ed88 --- /dev/null +++ b/src/tests/disabled_functions_parse_class.phpt | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - Parsing of an Object as a return value of a function | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | /* | ||
| 10 | Because Snuffleupagus used to cast everything with the `zval_get_string` function, | ||
| 11 | this sometimes raised exceptions, because PHP is awful. | ||
| 12 | */ | ||
| 13 | class Bob { | ||
| 14 | function a() { | ||
| 15 | return new StdClass; | ||
| 16 | } | ||
| 17 | } | ||
| 18 | $b = new Bob; | ||
| 19 | echo ($b->a() instanceof StdClass)?'Y':'N'; | ||
| 20 | ?> | ||
| 21 | --EXPECT-- | ||
| 22 | Y | ||
diff --git a/src/tests/disabled_functions_require.phpt b/src/tests/disabled_functions_require.phpt new file mode 100644 index 0000000..1eedde4 --- /dev/null +++ b/src/tests/disabled_functions_require.phpt | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - Require | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_require.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | $dir = __DIR__; | ||
| 10 | file_put_contents($dir . '/test.meh', ""); | ||
| 11 | file_put_contents($dir . '/test.bla', ""); | ||
| 12 | require $dir . '/test.meh'; | ||
| 13 | require $dir . '/test.bla'; | ||
| 14 | echo "1337"; | ||
| 15 | ?> | ||
| 16 | --XFAIL-- | ||
| 17 | PHP doesn't replace the format string, so the test is failing. | ||
| 18 | --EXPECTF-- | ||
| 19 | [snuffleupagus][0.0.0.0][include][drop] Inclusion of a forbidden file (%a/test.bla) | ||
| 20 | --CLEAN-- | ||
| 21 | <?php | ||
| 22 | $dir = __DIR__; | ||
| 23 | unlink($dir . '/test.meh'); | ||
| 24 | unlink($dir . '/test.bla'); | ||
| 25 | ?> | ||
diff --git a/src/tests/disabled_functions_ret.phpt b/src/tests/disabled_functions_ret.phpt new file mode 100644 index 0000000..b64bf70 --- /dev/null +++ b/src/tests/disabled_functions_ret.phpt | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret`. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "p"); | ||
| 10 | echo stripos("pouet", "p"); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret.php:2, because the return value (0) of the function 'strpos' matched a rule. | ||
diff --git a/src/tests/disabled_functions_ret2.phpt b/src/tests/disabled_functions_ret2.phpt new file mode 100644 index 0000000..b713201 --- /dev/null +++ b/src/tests/disabled_functions_ret2.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret`. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo stripos("pouet", "p"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret2.php:2, because the return value (0) of the function 'stripos' matched a rule. | ||
diff --git a/src/tests/disabled_functions_ret3.phpt b/src/tests/disabled_functions_ret3.phpt new file mode 100644 index 0000000..d5f96d0 --- /dev/null +++ b/src/tests/disabled_functions_ret3.phpt | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret`. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | class Bob { | ||
| 10 | function a() { | ||
| 11 | echo("We're in function `a`.\n"); | ||
| 12 | return 1; | ||
| 13 | } | ||
| 14 | } | ||
| 15 | $b = new Bob(); | ||
| 16 | echo "`a` returned: " . $b->a() . ".\n"; | ||
| 17 | echo("We're at the end of the execution.\n"); | ||
| 18 | ?> | ||
| 19 | --EXPECTF-- | ||
| 20 | We're in function `a`. | ||
| 21 | `a` returned: 1. | ||
| 22 | We're at the end of the execution. \ No newline at end of file | ||
diff --git a/src/tests/disabled_functions_ret_allow.phpt b/src/tests/disabled_functions_ret_allow.phpt new file mode 100644 index 0000000..1690995 --- /dev/null +++ b/src/tests/disabled_functions_ret_allow.phpt | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret`. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_ret_allow.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "p"); | ||
| 10 | echo stripos("pouet", "p"); | ||
| 11 | ?> | ||
| 12 | --EXPECT-- | ||
| 13 | 00 \ No newline at end of file | ||
diff --git a/src/tests/disabled_functions_ret_allow_value.phpt b/src/tests/disabled_functions_ret_allow_value.phpt new file mode 100644 index 0000000..881a006 --- /dev/null +++ b/src/tests/disabled_functions_ret_allow_value.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` allowed | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_ret_allow_value.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "p"); | ||
| 10 | ?> | ||
| 11 | --EXPECT-- | ||
| 12 | 0 | ||
diff --git a/src/tests/disabled_functions_ret_right_hash.phpt b/src/tests/disabled_functions_ret_right_hash.phpt new file mode 100644 index 0000000..e0d8b5b --- /dev/null +++ b/src/tests/disabled_functions_ret_right_hash.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_ret_right_hash.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo $((1 + 1336))"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | 1337 | ||
diff --git a/src/tests/disabled_functions_ret_simulation.phpt b/src/tests/disabled_functions_ret_simulation.phpt new file mode 100644 index 0000000..58af3a9 --- /dev/null +++ b/src/tests/disabled_functions_ret_simulation.phpt | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` simulation | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_ret_simulation.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "p") . "\n"; | ||
| 10 | echo stripos("pouet", "p") . "\n"; | ||
| 11 | strcmp("p", "p") . "\n"; | ||
| 12 | ?> | ||
| 13 | --EXPECTF-- | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][notice] The execution has been aborted in %a/disabled_functions_ret_simulation.php:2, because the return value (0) of the function 'strpos' matched a rule. | ||
| 15 | 0 | ||
| 16 | [snuffleupagus][0.0.0.0][disabled_function][notice] The execution has been aborted in %a/disabled_functions_ret_simulation.php:3, because the function 'stripos' returned '0', which matched the rule '1'. | ||
| 17 | 0 | ||
| 18 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_simulation.php:4, because the return value (0) of the function 'strcmp' matched a rule. | ||
diff --git a/src/tests/disabled_functions_ret_type.phpt b/src/tests/disabled_functions_ret_type.phpt new file mode 100644 index 0000000..f1c6e4c --- /dev/null +++ b/src/tests/disabled_functions_ret_type.phpt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching on boolean | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strpos("pouet", "p") . "\n"; | ||
| 10 | echo "1337\n"; | ||
| 11 | echo strpos("pouet", "123"); | ||
| 12 | ?> | ||
| 13 | --EXPECTF-- | ||
| 14 | 0 | ||
| 15 | 1337 | ||
| 16 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/tests/disabled_functions_ret_type.php:%d, because the function 'strpos' returned 'FALSE', which matched the rule 'Return value is FALSE'. | ||
diff --git a/src/tests/disabled_functions_ret_type_double.phpt b/src/tests/disabled_functions_ret_type_double.phpt new file mode 100644 index 0000000..b7942e1 --- /dev/null +++ b/src/tests/disabled_functions_ret_type_double.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching (double). | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type_double.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo cos(0.5) . "\n"; | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_type_double.php:%d, because the function 'cos' returned '0.877583', which matched the rule 'Return value is a double'. | ||
diff --git a/src/tests/disabled_functions_ret_type_long.phpt b/src/tests/disabled_functions_ret_type_long.phpt new file mode 100644 index 0000000..b841c64 --- /dev/null +++ b/src/tests/disabled_functions_ret_type_long.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching (long). | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type_long.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo strlen("pouet") . "\n"; | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_type_long.php:%d, because the function 'strlen' returned '5', which matched the rule 'Return value is a long'. | ||
diff --git a/src/tests/disabled_functions_ret_type_resource.phpt b/src/tests/disabled_functions_ret_type_resource.phpt new file mode 100644 index 0000000..4ceb610 --- /dev/null +++ b/src/tests/disabled_functions_ret_type_resource.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching (resource). | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type_resource.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo fopen("/etc/passwd", "r"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_type_resource.php:2, because the function 'fopen' returned 'RESOURCE', which matched the rule 'Return value is a resource'. | ||
diff --git a/src/tests/disabled_functions_ret_type_str.phpt b/src/tests/disabled_functions_ret_type_str.phpt new file mode 100644 index 0000000..8c48b1d --- /dev/null +++ b/src/tests/disabled_functions_ret_type_str.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching (string). | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type_str.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo substr("pouet", 3) . "\n"; | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_type_str.php:%d, because the function 'substr' returned 'et', which matched the rule 'Return value is a string'. | ||
diff --git a/src/tests/disabled_functions_ret_type_true.phpt b/src/tests/disabled_functions_ret_type_true.phpt new file mode 100644 index 0000000..a5eae38 --- /dev/null +++ b/src/tests/disabled_functions_ret_type_true.phpt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions check on `ret` by type matching (true). | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_ret_type_true.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | var_dump(is_numeric("pouet")) . "\n"; | ||
| 10 | echo "1337\n"; | ||
| 11 | echo is_numeric("1234") . "\n"; | ||
| 12 | ?> | ||
| 13 | --EXPECTF-- | ||
| 14 | bool(false) | ||
| 15 | 1337 | ||
| 16 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_type_true.php:%d, because the function 'is_numeric' returned 'TRUE', which matched the rule 'Return value is a true'. | ||
diff --git a/src/tests/disabled_functions_ret_val.phpt b/src/tests/disabled_functions_ret_val.phpt new file mode 100644 index 0000000..8a02b29 --- /dev/null +++ b/src/tests/disabled_functions_ret_val.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions ret val | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_retval.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo str_repeat("fufu",1)."\n"; | ||
| 10 | echo str_repeat("fufufu",1); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | fufu | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_val.php:3, because the return value (fufufu) of the function 'str_repeat' matched a rule. | ||
diff --git a/src/tests/disabled_functions_ret_val_rx.phpt b/src/tests/disabled_functions_ret_val_rx.phpt new file mode 100644 index 0000000..1054b70 --- /dev/null +++ b/src/tests/disabled_functions_ret_val_rx.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions ret val rx | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/disabled_functions_retval_rx.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo str_repeat("fufu",1)."\n"; | ||
| 10 | echo str_repeat("fufufu",1); | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | fufu | ||
| 14 | [snuffleupagus][0.0.0.0][disabled_function][drop] The execution has been aborted in %a/disabled_functions_ret_val_rx.php:3, because the return value (fufufu) of the function 'str_repeat' matched a rule. | ||
diff --git a/src/tests/disabled_functions_right_hash.phpt b/src/tests/disabled_functions_right_hash.phpt new file mode 100644 index 0000000..f3c5fb3 --- /dev/null +++ b/src/tests/disabled_functions_right_hash.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_right_hash.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo $((1 + 1336))"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | 1337 | ||
diff --git a/src/tests/disabled_functions_runtime.phpt b/src/tests/disabled_functions_runtime.phpt new file mode 100644 index 0000000..1c6a141 --- /dev/null +++ b/src/tests/disabled_functions_runtime.phpt | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions - runtime inclusion | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_functions_param_runtime.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | |||
| 10 | $dir = __DIR__; | ||
| 11 | $content = '<?php function test($param) { echo $param . "\n"; }'; | ||
| 12 | file_put_contents('file_to_include1.php', $content); | ||
| 13 | file_put_contents('file_to_include2.php', $content); | ||
| 14 | |||
| 15 | if (rand() % 2) { | ||
| 16 | include "file_to_include1.php"; | ||
| 17 | } else { | ||
| 18 | include "file_to_include2.php"; | ||
| 19 | } | ||
| 20 | |||
| 21 | test('1338');test('1337'); | ||
| 22 | |||
| 23 | ?> | ||
| 24 | --EXPECTF-- | ||
| 25 | 1338 | ||
| 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-- | ||
| 28 | <?php | ||
| 29 | unlink("file_to_include1.php"); | ||
| 30 | unlink("file_to_include2.php"); | ||
| 31 | ?> | ||
diff --git a/src/tests/disabled_functions_zero_cidr.phpt b/src/tests/disabled_functions_zero_cidr.phpt new file mode 100644 index 0000000..35d187a --- /dev/null +++ b/src/tests/disabled_functions_zero_cidr.phpt | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disable functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --ENV-- | ||
| 6 | return <<<EOF | ||
| 7 | REMOTE_ADDR=127.0.0.1 | ||
| 8 | EOF; | ||
| 9 | --INI-- | ||
| 10 | sp.configuration_file={PWD}/config/disabled_functions_zero_cidr.ini | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | system("echo 42"); | ||
| 14 | printf("1337"); | ||
| 15 | ?> | ||
| 16 | --EXPECTF-- | ||
| 17 | [snuffleupagus][127.0.0.1][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions_zero_cidr.php:2 has been disabled. | ||
| 18 | 1337 | ||
diff --git a/src/tests/disabled_option.phpt b/src/tests/disabled_option.phpt new file mode 100644 index 0000000..8bc7e39 --- /dev/null +++ b/src/tests/disabled_option.phpt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | --TEST-- | ||
| 2 | Harden rand | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_rand_harden_disabled.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | srand(0); | ||
| 10 | echo rand(0,100)."\n"; | ||
| 11 | srand(0); | ||
| 12 | echo rand(0,100)."\n"; | ||
| 13 | ?> | ||
| 14 | --EXPECT-- | ||
| 15 | 84 | ||
| 16 | 84 | ||
diff --git a/src/tests/disabled_user_functions.phpt b/src/tests/disabled_user_functions.phpt new file mode 100644 index 0000000..8952d43 --- /dev/null +++ b/src/tests/disabled_user_functions.phpt | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | --TEST-- | ||
| 2 | Disabled user-created functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_disabled_user_functions.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | function my_super_function() { | ||
| 10 | echo 1; | ||
| 11 | } | ||
| 12 | my_super_function(); | ||
| 13 | ?> | ||
| 14 | --EXPECTF-- | ||
| 15 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'my_super_function' in %a/tests/disabled_user_functions.php:3 has been disabled. | ||
diff --git a/src/tests/dump_request.phpt b/src/tests/dump_request.phpt new file mode 100644 index 0000000..a752def --- /dev/null +++ b/src/tests/dump_request.phpt | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | --TEST-- | ||
| 2 | Dump request | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) { | ||
| 6 | print "skip"; | ||
| 7 | } | ||
| 8 | |||
| 9 | foreach (glob("./tests/dump_results/*.dump") as $dump) { | ||
| 10 | unlink($dump); | ||
| 11 | } | ||
| 12 | rmdir("./tests/dump_results/"); | ||
| 13 | ?> | ||
| 14 | --POST-- | ||
| 15 | post_a=data_post_a&post_b=data_post_b | ||
| 16 | --GET-- | ||
| 17 | get_a=data_get_a&get_b=data_get_b | ||
| 18 | --COOKIE-- | ||
| 19 | cookie_a=data_cookie_a&cookie_b=data_cookie_b | ||
| 20 | --INI-- | ||
| 21 | sp.configuration_file={PWD}/config/dump_request.ini | ||
| 22 | --FILE-- | ||
| 23 | <?php | ||
| 24 | mkdir("./dump_results/"); | ||
| 25 | echo "1\n"; | ||
| 26 | echo system("echo 1337;"); | ||
| 27 | $filename = glob('./dump_results/*.dump')[0]; | ||
| 28 | $res = file($filename); | ||
| 29 | if ($res[1] != "GET:get_a=data_get_a&get_b=data_get_b\n") { | ||
| 30 | echo "1\n"; | ||
| 31 | } elseif ($res[2] != "POST:post_a=data_post_a&post_b=data_post_b\n") { | ||
| 32 | echo "2\n"; | ||
| 33 | } elseif ($res[3] != "COOKIE:cookie_a=data_cookie_a&cookie_b=data_cookie_b\n") { | ||
| 34 | echo "3\n"; | ||
| 35 | } | ||
| 36 | ?> | ||
| 37 | --EXPECTF-- | ||
| 38 | 1 | ||
| 39 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/dump_request.php:%d has been disabled. | ||
diff --git a/src/tests/dump_request_invalid_folder.phpt b/src/tests/dump_request_invalid_folder.phpt new file mode 100644 index 0000000..b866f70 --- /dev/null +++ b/src/tests/dump_request_invalid_folder.phpt | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | --TEST-- | ||
| 2 | Dump request - invalid folder. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) { print "skip"; } | ||
| 6 | ?> | ||
| 7 | --POST-- | ||
| 8 | post_a=data_post_a&post_b=data_post_b | ||
| 9 | --GET-- | ||
| 10 | get_a=data_get_a&get_b=data_get_b | ||
| 11 | --COOKIE-- | ||
| 12 | cookie_a=data_cookie_a&cookie_b=data_cookie_b | ||
| 13 | --INI-- | ||
| 14 | sp.configuration_file={PWD}/config/dump_request_invalid_folder.ini | ||
| 15 | --FILE-- | ||
| 16 | <?php | ||
| 17 | echo "1\n"; | ||
| 18 | echo system("echo 1337;"); | ||
| 19 | echo "2\n"; | ||
| 20 | ?> | ||
| 21 | --EXPECTF-- | ||
| 22 | 1 | ||
| 23 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %atests/dump_request_invalid_folder.php:3 has been disabled. | ||
| 24 | [snuffleupagus][0.0.0.0][request_logging][error] Unable to open /root/NON_EXISTENT/FOLDER/PLEASE/sp_dump_%a_0.0.0.0.dump | ||
| 25 | 2 \ No newline at end of file | ||
diff --git a/src/tests/dump_request_too_big.phpt b/src/tests/dump_request_too_big.phpt new file mode 100644 index 0000000..81eb71c --- /dev/null +++ b/src/tests/dump_request_too_big.phpt | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | --TEST-- | ||
| 2 | Dump request -- to big, so it's truncated. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php | ||
| 5 | if (!extension_loaded("snuffleupagus")) { | ||
| 6 | print "skip"; | ||
| 7 | } | ||
| 8 | |||
| 9 | foreach (glob("./tests/dump_results/*.dump") as $dump) { | ||
| 10 | unlink($dump); | ||
| 11 | } | ||
| 12 | rmdir("./tests/dump_results/"); | ||
| 13 | ?> | ||
| 14 | --POST-- | ||
| 15 | post_a=data_post_a&post_b=data_post_b&post_c=c | ||
| 16 | --GET-- | ||
| 17 | get_a=data_get_a&get_b=data_get_b&get_c=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBBB | ||
| 18 | --COOKIE-- | ||
| 19 | cookie_a=data_cookie_a&cookie_b=data_cookie_b&data_cookie_c=cookie_c | ||
| 20 | --ENV-- | ||
| 21 | return <<<END | ||
| 22 | REMOTE_ADDR=127.0.0.1 | ||
| 23 | END; | ||
| 24 | --INI-- | ||
| 25 | sp.configuration_file={PWD}/config/dump_request.ini | ||
| 26 | --FILE-- | ||
| 27 | <?php | ||
| 28 | echo "1\n"; | ||
| 29 | echo system("echo 1337;"); | ||
| 30 | $filename = glob('./dump_results/*.dump')[0]; | ||
| 31 | $res = file($filename); | ||
| 32 | if ($res[1] != "GET:get_a=data_get_a&get_b=data_get_b&get_c=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n") { | ||
| 33 | echo "1\n"; | ||
| 34 | } elseif ($res[2] != "POST:post_a=data_post_a&post_b=data_post_b&post_c=c\n") { | ||
| 35 | echo "2\n"; | ||
| 36 | } elseif ($res[3] != "COOKIE:cookie_a=data_cookie_a&cookie_b=data_cookie_b&data_cookie_c=cookie_c\n") { | ||
| 37 | echo "3\n"; | ||
| 38 | } | ||
| 39 | ?> | ||
| 40 | --EXPECTF-- | ||
| 41 | 1 | ||
| 42 | [snuffleupagus][127.0.0.1][disabled_function][drop] The call to the function 'system' in %a/dump_request_too_big.php:%d has been disabled. | ||
diff --git a/src/tests/empty_conf.phpt b/src/tests/empty_conf.phpt new file mode 100644 index 0000000..411c817 --- /dev/null +++ b/src/tests/empty_conf.phpt | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | --TEST-- | ||
| 2 | Empty configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/empty_conf.ini | ||
| 7 | --FILE-- | ||
| 8 | --EXPECT-- | ||
diff --git a/src/tests/encrypt_cookies.phpt b/src/tests/encrypt_cookies.phpt new file mode 100644 index 0000000..f8bf64f --- /dev/null +++ b/src/tests/encrypt_cookies.phpt | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie decryption in ipv4 | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | super_cookie=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEmXkk3H0xheoOMxoWPEDw1Zd8NAmD9KbB2DSjQ=%3d;awful_cookie=awful_cookie_value; | ||
| 9 | --ENV-- | ||
| 10 | return <<<EOF | ||
| 11 | REMOTE_ADDR=127.0.0.1 | ||
| 12 | HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36 | ||
| 13 | EOF; | ||
| 14 | --FILE-- | ||
| 15 | <?php var_dump($_COOKIE); ?> | ||
| 16 | --EXPECT-- | ||
| 17 | array(2) { | ||
| 18 | ["super_cookie"]=> | ||
| 19 | string(11) "super_value" | ||
| 20 | ["awful_cookie"]=> | ||
| 21 | string(18) "awful_cookie_value" | ||
| 22 | } | ||
diff --git a/src/tests/encrypt_cookies2.phpt b/src/tests/encrypt_cookies2.phpt new file mode 100644 index 0000000..be4c990 --- /dev/null +++ b/src/tests/encrypt_cookies2.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie encryption in ipv4 | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | --ENV-- | ||
| 9 | return <<<EOF | ||
| 10 | REMOTE_ADDR=127.0.0.1 | ||
| 11 | HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36 | ||
| 12 | HTTPS=1 | ||
| 13 | EOF; | ||
| 14 | --FILE-- | ||
| 15 | <?php | ||
| 16 | setcookie("super_cookie", "super_value"); | ||
| 17 | setcookie("awful_cookie", "awful_value"); | ||
| 18 | setcookie("nice_cookie", "nice_value", 1, "1", "1", true, true); | ||
| 19 | var_dump($_COOKIE); | ||
| 20 | ?> | ||
| 21 | --EXPECT-- | ||
| 22 | array(0) { | ||
| 23 | } | ||
diff --git a/src/tests/encrypt_cookies3.phpt b/src/tests/encrypt_cookies3.phpt new file mode 100644 index 0000000..c85c5dc --- /dev/null +++ b/src/tests/encrypt_cookies3.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie decryption with ipv6 | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | super_cookie=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJNTUge7MpiVNi4q3DqstbcumllXBir0CbIQiDI%3D;awful_cookie=awful_cookie_value; | ||
| 9 | --ENV-- | ||
| 10 | return <<<EOF | ||
| 11 | REMOTE_ADDR=2001:0db8:0000:0000:0000:fe00:0042:8329 | ||
| 12 | HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36 | ||
| 13 | HTTPS=1 | ||
| 14 | EOF; | ||
| 15 | --FILE-- | ||
| 16 | <?php var_dump($_COOKIE); ?> | ||
| 17 | --EXPECT-- | ||
| 18 | array(2) { | ||
| 19 | ["super_cookie"]=> | ||
| 20 | string(11) "super_value" | ||
| 21 | ["awful_cookie"]=> | ||
| 22 | string(18) "awful_cookie_value" | ||
| 23 | } | ||
diff --git a/src/tests/encrypt_cookies4.phpt b/src/tests/encrypt_cookies4.phpt new file mode 100644 index 0000000..14d737a --- /dev/null +++ b/src/tests/encrypt_cookies4.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie encryption in ipv6 | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | --ENV-- | ||
| 9 | return <<<EOF | ||
| 10 | REMOTE_ADDR=2001:0db8:0000:0000:0000:fe00:0042:8329 | ||
| 11 | HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36 | ||
| 12 | HTTPS=1 | ||
| 13 | EOF; | ||
| 14 | --FILE-- | ||
| 15 | <?php | ||
| 16 | setcookie("super_cookie", "super_value"); | ||
| 17 | setcookie("awful_cookie", "awful_value"); | ||
| 18 | setcookie("nice_cookie", "nice_value", 1, "1", "1", true, true); | ||
| 19 | var_dump($_COOKIE); | ||
| 20 | ?> | ||
| 21 | --EXPECT-- | ||
| 22 | array(0) { | ||
| 23 | } | ||
diff --git a/src/tests/encrypt_cookies_invalid_decryption.phpt b/src/tests/encrypt_cookies_invalid_decryption.phpt new file mode 100644 index 0000000..a5187c1 --- /dev/null +++ b/src/tests/encrypt_cookies_invalid_decryption.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie encryption | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | display_errors=1 | ||
| 8 | display_startup_errors=1 | ||
| 9 | error_reporting=E_ALL | ||
| 10 | --COOKIE-- | ||
| 11 | super_cookie=jWjORGsgZyqzk3WA63XZBmUoSknXWnXDfAAAAAAAAAAAAAAAAAAAAAA7LiMDfkpP94jDnMVH%2Fm41GeL0Y00q3mbOFYz%2FS9mQGySu;awful_cookie=awful_cookie_value; | ||
| 12 | --ENV-- | ||
| 13 | return <<<EOF | ||
| 14 | REMOTE_ADDR=127.0.0.1 | ||
| 15 | EOF; | ||
| 16 | --FILE-- | ||
| 17 | <?php var_dump($_COOKIE); ?> | ||
| 18 | --EXPECT-- | ||
| 19 | |||
| 20 | array(1) { | ||
| 21 | ["awful_cookie"]=> | ||
| 22 | string(18) "awful_cookie_value" | ||
| 23 | } | ||
diff --git a/src/tests/encrypt_cookies_invalid_decryption2.phpt b/src/tests/encrypt_cookies_invalid_decryption2.phpt new file mode 100644 index 0000000..f18cf6d --- /dev/null +++ b/src/tests/encrypt_cookies_invalid_decryption2.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie encryption | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | display_errors=1 | ||
| 8 | display_startup_errors=1 | ||
| 9 | error_reporting=E_ALL | ||
| 10 | --COOKIE-- | ||
| 11 | super_cookie=1337;awful_cookie=awful_cookie_value; | ||
| 12 | --ENV-- | ||
| 13 | return <<<EOF | ||
| 14 | REMOTE_ADDR=127.0.0.1 | ||
| 15 | EOF; | ||
| 16 | --FILE-- | ||
| 17 | <?php var_dump($_COOKIE); ?> | ||
| 18 | --EXPECT-- | ||
| 19 | |||
| 20 | array(1) { | ||
| 21 | ["awful_cookie"]=> | ||
| 22 | string(18) "awful_cookie_value" | ||
| 23 | } | ||
diff --git a/src/tests/encrypt_cookies_invalid_decryption3.phpt b/src/tests/encrypt_cookies_invalid_decryption3.phpt new file mode 100644 index 0000000..f4afc32 --- /dev/null +++ b/src/tests/encrypt_cookies_invalid_decryption3.phpt | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | --TEST-- | ||
| 2 | Cookie encryption | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | super_cookie=;awful_cookie=awful_cookie_value; | ||
| 9 | --ENV-- | ||
| 10 | return <<<EOF | ||
| 11 | REMOTE_ADDR=127.0.0.1 | ||
| 12 | EOF; | ||
| 13 | --FILE-- | ||
| 14 | <?php var_dump($_COOKIE); ?> | ||
| 15 | --EXPECT-- | ||
| 16 | array(2) { | ||
| 17 | ["super_cookie"]=> | ||
| 18 | string(0) "" | ||
| 19 | ["awful_cookie"]=> | ||
| 20 | string(18) "awful_cookie_value" | ||
| 21 | } | ||
diff --git a/src/tests/encryption_key_only.phpt b/src/tests/encryption_key_only.phpt new file mode 100644 index 0000000..bf5edb5 --- /dev/null +++ b/src/tests/encryption_key_only.phpt | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | --TEST-- | ||
| 2 | Encryption key only | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/encryption_key_only.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo 1337; | ||
| 10 | ?> | ||
| 11 | --EXPECT-- | ||
| 12 | 1337 | ||
| 13 | |||
diff --git a/src/tests/example_configuration.phpt b/src/tests/example_configuration.phpt new file mode 100644 index 0000000..0bbf59c --- /dev/null +++ b/src/tests/example_configuration.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Shipped configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/../../config/examples.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo 0"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | 0 | ||
diff --git a/src/tests/global_strict.phpt b/src/tests/global_strict.phpt new file mode 100644 index 0000000..e06721c --- /dev/null +++ b/src/tests/global_strict.phpt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | --TEST-- | ||
| 2 | Global strict mode | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/global_strict.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | strcmp("pouet", []); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | Fatal error: Uncaught TypeError: strcmp() expects parameter 2 to be string, array given in %a/global_strict.php:2 | ||
| 13 | Stack trace: | ||
| 14 | #0 %a/global_strict.php(2): strcmp('pouet', Array) | ||
| 15 | #1 {main} | ||
| 16 | thrown in %a/global_strict.php on line 2 | ||
diff --git a/src/tests/global_strict_disabled.phpt b/src/tests/global_strict_disabled.phpt new file mode 100644 index 0000000..ca3ddfa --- /dev/null +++ b/src/tests/global_strict_disabled.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Global strict mode | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/global_strict_disabled.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | strcmp("pouet", []); | ||
| 10 | echo 1337; | ||
| 11 | ?> | ||
| 12 | --EXPECTF-- | ||
| 13 | Warning: strcmp() expects parameter 2 to be string, array given in %a/global_strict_disabled.php on line 2 | ||
| 14 | 1337 | ||
diff --git a/src/tests/harden_mt_rand.phpt b/src/tests/harden_mt_rand.phpt new file mode 100644 index 0000000..8887613 --- /dev/null +++ b/src/tests/harden_mt_rand.phpt | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | --TEST-- | ||
| 2 | Harden mt_rand | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/harden_rand.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | mt_srand(0); | ||
| 10 | $a = mt_rand(0,100)."\n"; | ||
| 11 | $b = mt_rand(0,100)."\n"; | ||
| 12 | mt_srand(0); | ||
| 13 | $c = mt_rand(0,100)."\n"; | ||
| 14 | $d = mt_rand(0,100)."\n"; | ||
| 15 | |||
| 16 | if ($a == $c && $b == $d) | ||
| 17 | echo 'lose'; | ||
| 18 | else | ||
| 19 | echo 'win'; | ||
| 20 | ?> | ||
| 21 | --EXPECT-- | ||
| 22 | win | ||
diff --git a/src/tests/harden_rand.phpt b/src/tests/harden_rand.phpt new file mode 100644 index 0000000..391bccc --- /dev/null +++ b/src/tests/harden_rand.phpt | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | --TEST-- | ||
| 2 | Harden rand | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/harden_rand.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | srand(0); | ||
| 10 | $a = rand(0,100)."\n"; | ||
| 11 | $b = rand(0,100)."\n"; | ||
| 12 | srand(0); | ||
| 13 | $c = rand(0,100)."\n"; | ||
| 14 | $d = rand(0,100)."\n"; | ||
| 15 | |||
| 16 | rand(100,0)."\n"; | ||
| 17 | |||
| 18 | if ($a == $c && $b == $d) | ||
| 19 | echo 'fail'; | ||
| 20 | else | ||
| 21 | echo 'win'; | ||
| 22 | ?> | ||
| 23 | --EXPECT-- | ||
| 24 | win | ||
diff --git a/src/tests/harden_rand_noargs.phpt b/src/tests/harden_rand_noargs.phpt new file mode 100644 index 0000000..643a453 --- /dev/null +++ b/src/tests/harden_rand_noargs.phpt | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | --TEST-- | ||
| 2 | Harden rand without any arguments | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/harden_rand.ini | ||
| 7 | We should fix this | ||
| 8 | --FILE-- | ||
| 9 | <?php | ||
| 10 | rand(); | ||
| 11 | mt_rand(); | ||
| 12 | |||
| 13 | rand(1); | ||
| 14 | mt_rand(1); | ||
| 15 | |||
| 16 | rand(1, 2); | ||
| 17 | mt_rand(1, 2); | ||
| 18 | |||
| 19 | rand(2, 1); | ||
| 20 | mt_rand(2, 1); | ||
| 21 | |||
| 22 | rand(2, 1, 0); | ||
| 23 | mt_rand(2, 1, 0); | ||
| 24 | |||
| 25 | rand("test", 1); | ||
| 26 | mt_rand("test", 1); | ||
| 27 | |||
| 28 | rand(1, "test"); | ||
| 29 | mt_rand(1, "test"); | ||
| 30 | |||
| 31 | rand(1, 2, "test"); | ||
| 32 | mt_rand(1, 2, "test"); | ||
| 33 | |||
| 34 | echo "Everything is fine\n"; | ||
| 35 | echo "Absolutely everything\n"; | ||
| 36 | echo 'Even with single quotes'; | ||
| 37 | ?> | ||
| 38 | --EXPECTF-- | ||
| 39 | Warning: rand() expects exactly 2 parameters, 1 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 40 | |||
| 41 | Warning: mt_rand() expects exactly 2 parameters, 1 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 42 | |||
| 43 | Warning: mt_rand(): max(1) is smaller than min(2) in %s/tests/harden_rand_noargs.php on line %d | ||
| 44 | |||
| 45 | Warning: rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 46 | |||
| 47 | Warning: mt_rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 48 | |||
| 49 | Warning: rand() expects parameter 1 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d | ||
| 50 | |||
| 51 | Warning: mt_rand() expects parameter 1 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d | ||
| 52 | |||
| 53 | Warning: rand() expects parameter 2 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d | ||
| 54 | |||
| 55 | Warning: mt_rand() expects parameter 2 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d | ||
| 56 | |||
| 57 | Warning: rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 58 | |||
| 59 | Warning: mt_rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d | ||
| 60 | Everything is fine | ||
| 61 | Absolutely everything | ||
| 62 | Even with single quotes | ||
diff --git a/src/tests/inexistent_conf_file.phpt b/src/tests/inexistent_conf_file.phpt new file mode 100644 index 0000000..c7c3fcd --- /dev/null +++ b/src/tests/inexistent_conf_file.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Check for snuffleupagus presence | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/unexistent_configuration_file.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php ?> | ||
| 9 | --EXPECTF-- | ||
| 10 | [snuffleupagus][0.0.0.0][config][error] Could not open configuration file %a/tests/config/unexistent_configuration_file.ini : No such file or directory | ||
diff --git a/src/tests/loading.phpt b/src/tests/loading.phpt new file mode 100644 index 0000000..25e2e17 --- /dev/null +++ b/src/tests/loading.phpt | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | --TEST-- | ||
| 2 | Check for snuffleupagus presence | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --FILE-- | ||
| 6 | <?php | ||
| 7 | echo "snuffleupagus extension is available"; | ||
| 8 | ?> | ||
| 9 | --EXPECT-- | ||
| 10 | snuffleupagus extension is available | ||
diff --git a/src/tests/noncore_function_hooking.phpt b/src/tests/noncore_function_hooking.phpt new file mode 100644 index 0000000..106123c --- /dev/null +++ b/src/tests/noncore_function_hooking.phpt | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | --TEST-- | ||
| 2 | Hooking of user-defined functions | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_noncore_function_hooking.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | function custom_fun($a) { | ||
| 10 | echo $a; | ||
| 11 | } | ||
| 12 | custom_fun("hello"); | ||
| 13 | ?> | ||
| 14 | --EXPECTF-- | ||
| 15 | [snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'custom_fun' in %a/tests/noncore_function_hooking.php:3 has been disabled. | ||
diff --git a/src/tests/phpinfo_presence.phpt b/src/tests/phpinfo_presence.phpt new file mode 100644 index 0000000..35ed0ed --- /dev/null +++ b/src/tests/phpinfo_presence.phpt | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | --TEST-- | ||
| 2 | Unserialize fail | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_serialize.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | ob_start () ; | ||
| 10 | phpinfo () ; | ||
| 11 | $pinfo = ob_get_contents () ; | ||
| 12 | ob_end_clean () ; | ||
| 13 | if (strstr($pinfo, "snuffleupagus") !== FALSE) | ||
| 14 | echo 1; | ||
| 15 | else | ||
| 16 | echo 2; | ||
| 17 | ?> | ||
| 18 | --EXPECT-- | ||
| 19 | 1 | ||
diff --git a/src/tests/serialize.phpt b/src/tests/serialize.phpt new file mode 100644 index 0000000..e93dbaf --- /dev/null +++ b/src/tests/serialize.phpt | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | --TEST-- | ||
| 2 | Test serialize hmac | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_serialize.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo serialize("a"); | ||
| 10 | ?> | ||
| 11 | --EXPECT-- | ||
| 12 | s:1:"a";650609b417904d0d9bbf1fc44a975d13ecdf6b02b715c1a06271fb3b673f25b1 | ||
| 13 | |||
diff --git a/src/tests/setcookie.phpt b/src/tests/setcookie.phpt new file mode 100644 index 0000000..ba1d1c1 --- /dev/null +++ b/src/tests/setcookie.phpt | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | --TEST-- | ||
| 2 | Set cookies. | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_encrypted_cookies.ini | ||
| 7 | --COOKIE-- | ||
| 8 | --ENV-- | ||
| 9 | return <<<EOF | ||
| 10 | REMOTE_ADDR=127.0.0.1 | ||
| 11 | HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36 | ||
| 12 | HTTPS=1 | ||
| 13 | EOF; | ||
| 14 | --FILE-- | ||
| 15 | <?php | ||
| 16 | setcookie("name"); | ||
| 17 | setcookie("super_cookie"); | ||
| 18 | setcookie("name", "value"); | ||
| 19 | setcookie("name", "value1", 1); | ||
| 20 | setcookie("name", "value2", 0); | ||
| 21 | setcookie("name", "value", 1, "/super/path"); | ||
| 22 | setcookie("name", "value", 1, "/super/path", "super_domain"); | ||
| 23 | setcookie("name", "value", 1, "/super/path", "super_domain1", true); | ||
| 24 | setcookie("name", "value", 1, "/super/path", "super_domain2", false); | ||
| 25 | setcookie("name", "value", 1, "/super/path", "super_domain1", true, true); | ||
| 26 | setcookie("name", "value", 1, "/super/path", "super_domain2", true, false); | ||
| 27 | setcookie("name", "value", 1, "/super/path", "super_domain2", true, false, 1337); | ||
| 28 | setcookie(); | ||
| 29 | echo '1337'; | ||
| 30 | ?> | ||
| 31 | --EXPECTF-- | ||
| 32 | Warning: setcookie() expects at most 7 parameters, 8 given in %a/setcookie.php on line %d | ||
| 33 | |||
| 34 | Warning: setcookie() expects at least 1 parameter, 0 given in %a/setcookie.php on line %d | ||
| 35 | 1337 | ||
diff --git a/src/tests/shipped_configuration.phpt b/src/tests/shipped_configuration.phpt new file mode 100644 index 0000000..c060a85 --- /dev/null +++ b/src/tests/shipped_configuration.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Shipped configuration | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) die "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/../../config/default.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | system("echo 0"); | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | 0 | ||
diff --git a/src/tests/unserialize.phpt b/src/tests/unserialize.phpt new file mode 100644 index 0000000..b1db915 --- /dev/null +++ b/src/tests/unserialize.phpt | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | --TEST-- | ||
| 2 | Unserialize ok | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_serialize.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | $a=serialize("a"); | ||
| 10 | var_dump(unserialize($a)); | ||
| 11 | ?> | ||
| 12 | --EXPECT-- | ||
| 13 | string(1) "a" | ||
diff --git a/src/tests/unserialize_fail.phpt b/src/tests/unserialize_fail.phpt new file mode 100644 index 0000000..5c0bb80 --- /dev/null +++ b/src/tests/unserialize_fail.phpt | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | --TEST-- | ||
| 2 | Unserialize fail | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_serialize.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | var_dump(unserialize('s:1:"a";')); | ||
| 10 | var_dump(unserialize('s:1:"a";alyualskdufyhalkdjsfhalkjdhflaksjdfhlkasdhflkahdawkuerylksjdfhlkssjgdflaksjdhflkasjdf')); | ||
| 11 | var_dump(unserialize('s:1:"a";dslfjklfjfkjfdjffjfjads')); | ||
| 12 | var_dump(unserialize(1,2,3,4)); | ||
| 13 | ?> | ||
| 14 | --EXPECTF-- | ||
| 15 | [snuffleupagus][0.0.0.0][unserialize][drop] The serialized object is too small. | ||
| 16 | bool(false) | ||
| 17 | [snuffleupagus][0.0.0.0][unserialize][drop] Invalid HMAC for s:1:"a";alyualskdufyhalkdjsfh | ||
| 18 | NULL | ||
| 19 | [snuffleupagus][0.0.0.0][unserialize][drop] The serialized object is too small. | ||
| 20 | bool(false) | ||
| 21 | |||
| 22 | Warning: unserialize() expects at most 2 parameters, 4 given in %a/tests/unserialize_fail.php on line %d | ||
| 23 | bool(false) \ No newline at end of file | ||
diff --git a/src/tests/unserialize_sim.phpt b/src/tests/unserialize_sim.phpt new file mode 100644 index 0000000..8ebf64d --- /dev/null +++ b/src/tests/unserialize_sim.phpt | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | --TEST-- | ||
| 2 | Unserialize ok | ||
| 3 | --SKIPIF-- | ||
| 4 | <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?> | ||
| 5 | --INI-- | ||
| 6 | sp.configuration_file={PWD}/config/config_serialize_sim.ini | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | $a=serialize("a"); | ||
| 10 | echo $a; | ||
| 11 | var_dump(unserialize($a)); | ||
| 12 | var_dump(unserialize('s:1:"a";alyualskdufyhalkdjsfhalkjdhflaksjdfhlkasdhflkahdawkuerylksjdfhlkssjgdflaksjdh1337sjdf')); | ||
| 13 | ?> | ||
| 14 | --EXPECT-- | ||
| 15 | s:1:"a";650609b417904d0d9bbf1fc44a975d13ecdf6b02b715c1a06271fb3b673f25b1string(1) "a" | ||
| 16 | [snuffleupagus][0.0.0.0][unserialize][notice] Invalid HMAC for s:1:"a";alyualskdufyhalkdjsfh | ||
| 17 | string(1) "a" | ||
diff --git a/src/tests/upload_validation.phpt b/src/tests/upload_validation.phpt new file mode 100644 index 0000000..c802c16 --- /dev/null +++ b/src/tests/upload_validation.phpt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload a file, validation ok, no simulation | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation.ini | ||
| 6 | --POST_RAW-- | ||
| 7 | Content-Type: multipart/form-data; boundary=blabla | ||
| 8 | --blabla | ||
| 9 | Content-Disposition: form-data; name="test"; filename="test.php" | ||
| 10 | --blabla-- | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | echo 1; | ||
| 14 | ?> | ||
| 15 | --EXPECTF-- | ||
| 16 | 1 | ||
diff --git a/src/tests/upload_validation_invalid.phpt b/src/tests/upload_validation_invalid.phpt new file mode 100644 index 0000000..f8c993b --- /dev/null +++ b/src/tests/upload_validation_invalid.phpt | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload a file, invalid validation script | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation_invalid.ini | ||
| 6 | --POST_RAW-- | ||
| 7 | Content-Type: multipart/form-data; boundary=blabla | ||
| 8 | --blabla | ||
| 9 | Content-Disposition: form-data; name="test"; filename="test.php" | ||
| 10 | --blabla-- | ||
| 11 | --FILE-- | ||
| 12 | <?php | ||
| 13 | echo 1; | ||
| 14 | ?> | ||
| 15 | --EXPECTF-- | ||
| 16 | [snuffleupagus][0.0.0.0][upload_validation][error] Could not call './tests/data/upload_invalid.sh' : Exec format error | ||
| 17 | [snuffleupagus][0.0.0.0][upload_valiation][drop] The upload of test.php on ? was rejected. | ||
diff --git a/src/tests/upload_validation_ko.phpt b/src/tests/upload_validation_ko.phpt new file mode 100644 index 0000000..cf4057a --- /dev/null +++ b/src/tests/upload_validation_ko.phpt | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload a file, validation ko, no simulation | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation_ko.ini | ||
| 6 | output_buffering=off | ||
| 7 | --POST_RAW-- | ||
| 8 | Content-Type: multipart/form-data; boundary=blabla | ||
| 9 | --blabla | ||
| 10 | Content-Disposition: form-data; name="test"; filename="test.php" | ||
| 11 | --blabla-- | ||
| 12 | --FILE-- | ||
| 13 | --EXPECTF-- | ||
| 14 | [snuffleupagus][0.0.0.0][upload_valiation][drop] The upload of test.php on ? was rejected. | ||
diff --git a/src/tests/upload_validation_no_exec.phpt b/src/tests/upload_validation_no_exec.phpt new file mode 100644 index 0000000..90a58da --- /dev/null +++ b/src/tests/upload_validation_no_exec.phpt | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload a file, validation script not executable | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation_non_exec.ini | ||
| 6 | output_buffering=off | ||
| 7 | --POST_RAW-- | ||
| 8 | Content-Type: multipart/form-data; boundary=blabla | ||
| 9 | --blabla | ||
| 10 | Content-Disposition: form-data; name="test"; filename="test.php" | ||
| 11 | --blabla-- | ||
| 12 | --FILE-- | ||
| 13 | <?php | ||
| 14 | var_dump($_FILES); | ||
| 15 | echo "\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; | ||
| 16 | ?> | ||
| 17 | --EXPECTF-- | ||
| 18 | array(1) { | ||
| 19 | ["test"]=> | ||
| 20 | array(5) { | ||
| 21 | ["name"]=> | ||
| 22 | string(8) "test.php" | ||
| 23 | ["type"]=> | ||
| 24 | string(0) "" | ||
| 25 | ["tmp_name"]=> | ||
| 26 | string(0) "" | ||
| 27 | ["error"]=> | ||
| 28 | int(3) | ||
| 29 | ["size"]=> | ||
| 30 | int(0) | ||
| 31 | } | ||
| 32 | } | ||
diff --git a/src/tests/upload_validation_nocrash.phpt b/src/tests/upload_validation_nocrash.phpt new file mode 100644 index 0000000..6fa50d0 --- /dev/null +++ b/src/tests/upload_validation_nocrash.phpt | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload validation isn't crashing | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation_ok.ini | ||
| 6 | output_buffering=off | ||
| 7 | --FILE-- | ||
| 8 | <?php | ||
| 9 | echo 1; | ||
| 10 | ?> | ||
| 11 | --EXPECTF-- | ||
| 12 | 1 | ||
diff --git a/src/tests/upload_validation_ok.phpt b/src/tests/upload_validation_ok.phpt new file mode 100644 index 0000000..f9b5015 --- /dev/null +++ b/src/tests/upload_validation_ok.phpt | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | --TEST-- | ||
| 2 | Upload a file, validation ok, no simulation | ||
| 3 | --INI-- | ||
| 4 | file_uploads=1 | ||
| 5 | sp.configuration_file={PWD}/config/upload_validation_ok.ini | ||
| 6 | output_buffering=off | ||
| 7 | --POST_RAW-- | ||
| 8 | Content-Type: multipart/form-data; boundary=blabla | ||
| 9 | --blabla | ||
| 10 | Content-Disposition: form-data; name="test"; filename="test.php" | ||
| 11 | --blabla-- | ||
| 12 | --FILE-- | ||
| 13 | <?php | ||
| 14 | echo 1; | ||
| 15 | ?> | ||
| 16 | --EXPECTF-- | ||
| 17 | 1 | ||
