From 868f96c759b6650d88ff9f4fbc5c048302134248 Mon Sep 17 00:00:00 2001 From: Sebastien Blot Date: Wed, 20 Sep 2017 10:11:01 +0200 Subject: Initial import --- src/tests/broken_conf.phpt | 10 ++ src/tests/broken_conf2.phpt | 9 ++ src/tests/broken_conf_config_regexp.phpt | 10 ++ src/tests/broken_conf_enable_disable.phpt | 9 ++ src/tests/broken_conf_expecting_bool.phpt | 9 ++ src/tests/broken_conf_expecting_int.phpt | 9 ++ src/tests/broken_conf_invalid_cidr.phpt | 9 ++ src/tests/broken_conf_invalid_cidr6.phpt | 9 ++ src/tests/broken_conf_invalid_cidr6_no_slash.phpt | 9 ++ src/tests/broken_conf_invalid_cidr6_too_big.phpt | 9 ++ src/tests/broken_conf_invalid_cidr_value.phpt | 11 +++ src/tests/broken_conf_invalid_type.phpt | 9 ++ src/tests/broken_conf_line_empty_string.phpt | 9 ++ src/tests/broken_conf_line_no_closing.phpt | 9 ++ src/tests/broken_conf_line_too_long.phpt | 10 ++ src/tests/broken_conf_lots_of_quotes.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive2.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive3.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive4.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive5.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive6.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive7.phpt | 9 ++ src/tests/broken_conf_mutually_exclusive8.phpt | 9 ++ src/tests/broken_conf_no_closing_misc.phpt | 10 ++ src/tests/broken_conf_weird_keyword.phpt | 9 ++ src/tests/broken_conf_wrong_quotes.phpt | 9 ++ src/tests/broken_conf_wrong_type.phpt | 9 ++ src/tests/broken_regexp.phpt | 9 ++ src/tests/config/borken_conf_enable_disable.ini | 1 + src/tests/config/broken_conf.ini | 1 + src/tests/config/broken_conf2.ini | 1 + src/tests/config/broken_conf_expecting_bool.ini | 5 + src/tests/config/broken_conf_expecting_int.ini | 2 + src/tests/config/broken_conf_invalid_cidr.ini | 1 + src/tests/config/broken_conf_invalid_cidr6.ini | 1 + .../config/broken_conf_invalid_cidr6_no_slash.ini | 1 + .../config/broken_conf_invalid_cidr6_too_big.ini | 1 + .../config/broken_conf_invalid_cidr_value.ini | 1 + src/tests/config/broken_conf_invalid_type.ini | 1 + src/tests/config/broken_conf_line_empty_string.ini | 1 + src/tests/config/broken_conf_line_no_closing.ini | 1 + src/tests/config/broken_conf_line_too_long.ini | 1 + src/tests/config/broken_conf_lots_of_quotes.ini | 1 + .../config/broken_conf_mutually_exclusive.ini | 1 + .../config/broken_conf_mutually_exclusive2.ini | 1 + .../config/broken_conf_mutually_exclusive3.ini | 1 + .../config/broken_conf_mutually_exclusive4.ini | 1 + .../config/broken_conf_mutually_exclusive5.ini | 1 + .../config/broken_conf_mutually_exclusive6.ini | 1 + .../config/broken_conf_mutually_exclusive7.ini | 1 + .../config/broken_conf_mutually_exclusive8.ini | 1 + src/tests/config/broken_conf_no_closing_misc.ini | 1 + src/tests/config/broken_conf_to_few_args.ini | 1 + src/tests/config/broken_conf_weird_keyword.ini | 1 + src/tests/config/broken_conf_wrong_quotes.ini | 1 + src/tests/config/broken_conf_wrong_type.ini | 5 + src/tests/config/broken_config_regexp.ini | 1 + src/tests/config/broken_regexp.ini | 1 + src/tests/config/config_disable_writable.ini | 1 + .../config/config_disable_writable_disabled.ini | 1 + .../config/config_disable_writable_simulation.ini | 1 + .../config_disabled_functions_filename_r.ini | 2 + .../config/config_disabled_functions_method.ini | 3 + .../config/config_disabled_functions_name_r.ini | 2 + .../config/config_disabled_functions_name_type.ini | 1 + .../config/config_disabled_functions_namespace.ini | 2 + .../config/config_disabled_functions_nul_byte.ini | 1 + .../config/config_disabled_functions_param.ini | 6 ++ .../config_disabled_functions_param_alias.ini | 2 + .../config_disabled_functions_param_allow.ini | 3 + .../config_disabled_functions_param_array.ini | 4 + .../config/config_disabled_functions_param_int.ini | 2 + .../config/config_disabled_functions_param_r.ini | 1 + .../config_disabled_functions_param_runtime.ini | 1 + ...disabled_functions_param_str_representation.ini | 1 + .../config/config_disabled_functions_require.ini | 1 + .../config/config_disabled_functions_ret_allow.ini | 2 + .../config_disabled_functions_ret_allow_value.ini | 1 + .../config_disabled_functions_ret_right_hash.ini | 4 + .../config_disabled_functions_ret_simulation.ini | 3 + .../config_disabled_functions_right_hash.ini | 3 + .../config/config_disabled_user_functions.ini | 1 + src/tests/config/config_encrypted_cookies.ini | 3 + .../config/config_noncore_function_hooking.ini | 1 + src/tests/config/config_rand_harden_disabled.ini | 1 + src/tests/config/config_serialize.ini | 2 + src/tests/config/config_serialize_sim.ini | 2 + src/tests/config/disable_xxe.ini | 1 + src/tests/config/disable_xxe_disable.ini | 1 + src/tests/config/disabled_function_local_var.ini | 2 + .../config/disabled_function_super_global_var.ini | 1 + src/tests/config/disabled_functions.ini | 7 ++ src/tests/config/disabled_functions_cidr.ini | 4 + src/tests/config/disabled_functions_mb.ini | 2 + src/tests/config/disabled_functions_ret.ini | 5 + src/tests/config/disabled_functions_ret_type.ini | 1 + .../config/disabled_functions_ret_type_double.ini | 1 + .../config/disabled_functions_ret_type_long.ini | 1 + .../disabled_functions_ret_type_resource.ini | 1 + .../config/disabled_functions_ret_type_str.ini | 1 + .../config/disabled_functions_ret_type_true.ini | 1 + src/tests/config/disabled_functions_retval.ini | 1 + src/tests/config/disabled_functions_retval_rx.ini | 1 + src/tests/config/disabled_functions_zero_cidr.ini | 1 + src/tests/config/dump_request.ini | 1 + src/tests/config/dump_request_invalid_folder.ini | 1 + src/tests/config/empty.ini | 0 src/tests/config/empty_conf.ini | 0 src/tests/config/encryption_key_only.ini | 1 + src/tests/config/global_strict.ini | 1 + src/tests/config/global_strict_disabled.ini | 1 + src/tests/config/harden_rand.ini | 1 + src/tests/config/upload_validation.ini | 2 + src/tests/config/upload_validation_invalid.ini | 1 + src/tests/config/upload_validation_ko.ini | 1 + .../config/upload_validation_ko_simulation.ini | 1 + src/tests/config/upload_validation_no_exist.ini | 1 + src/tests/config/upload_validation_non_exec.ini | 1 + src/tests/config/upload_validation_ok.ini | 1 + src/tests/data/upload_invalid.sh | 1 + src/tests/data/upload_ko.sh | 2 + src/tests/data/upload_no_exec.sh | 2 + src/tests/data/upload_ok.sh | 2 + src/tests/deny_writable_execution.phpt | 44 +++++++++ src/tests/deny_writable_execution_disabled.phpt | 32 +++++++ src/tests/deny_writable_execution_simulation.phpt | 45 +++++++++ src/tests/disable_xxe_dom.phpt | 71 ++++++++++++++ src/tests/disable_xxe_dom_disabled.phpt | 56 +++++++++++ src/tests/disable_xxe_simplexml.phpt | 52 +++++++++++ src/tests/disable_xxe_simplexml_oop.phpt | 52 +++++++++++ src/tests/disable_xxe_xml_parse.phpt | 104 +++++++++++++++++++++ src/tests/disabled_function_local_var.phpt | 24 +++++ src/tests/disabled_function_super_global_var.phpt | 20 ++++ src/tests/disabled_functions.phpt | 21 +++++ src/tests/disabled_functions_cidr.phpt | 18 ++++ src/tests/disabled_functions_cidr_6.phpt | 18 ++++ src/tests/disabled_functions_filename_r.phpt | 14 +++ src/tests/disabled_functions_mb.phpt | 12 +++ src/tests/disabled_functions_method.phpt | 29 ++++++ src/tests/disabled_functions_name_r.phpt | 15 +++ src/tests/disabled_functions_name_type.phpt | 14 +++ src/tests/disabled_functions_namespace.phpt | 31 ++++++ src/tests/disabled_functions_noconf.phpt | 12 +++ src/tests/disabled_functions_nul_byte.phpt | 15 +++ src/tests/disabled_functions_param.phpt | 24 +++++ src/tests/disabled_functions_param_alias.phpt | 14 +++ src/tests/disabled_functions_param_allow.phpt | 14 +++ src/tests/disabled_functions_param_array.phpt | 37 ++++++++ src/tests/disabled_functions_param_int.phpt | 25 +++++ src/tests/disabled_functions_param_r.phpt | 14 +++ ...isabled_functions_param_str_representation.phpt | 25 +++++ src/tests/disabled_functions_parse_class.phpt | 22 +++++ src/tests/disabled_functions_require.phpt | 25 +++++ src/tests/disabled_functions_ret.phpt | 13 +++ src/tests/disabled_functions_ret2.phpt | 12 +++ src/tests/disabled_functions_ret3.phpt | 22 +++++ src/tests/disabled_functions_ret_allow.phpt | 13 +++ src/tests/disabled_functions_ret_allow_value.phpt | 12 +++ src/tests/disabled_functions_ret_right_hash.phpt | 12 +++ src/tests/disabled_functions_ret_simulation.phpt | 18 ++++ src/tests/disabled_functions_ret_type.phpt | 16 ++++ src/tests/disabled_functions_ret_type_double.phpt | 12 +++ src/tests/disabled_functions_ret_type_long.phpt | 12 +++ .../disabled_functions_ret_type_resource.phpt | 12 +++ src/tests/disabled_functions_ret_type_str.phpt | 12 +++ src/tests/disabled_functions_ret_type_true.phpt | 16 ++++ src/tests/disabled_functions_ret_val.phpt | 14 +++ src/tests/disabled_functions_ret_val_rx.phpt | 14 +++ src/tests/disabled_functions_right_hash.phpt | 12 +++ src/tests/disabled_functions_runtime.phpt | 31 ++++++ src/tests/disabled_functions_zero_cidr.phpt | 18 ++++ src/tests/disabled_option.phpt | 16 ++++ src/tests/disabled_user_functions.phpt | 15 +++ src/tests/dump_request.phpt | 39 ++++++++ src/tests/dump_request_invalid_folder.phpt | 25 +++++ src/tests/dump_request_too_big.phpt | 42 +++++++++ src/tests/empty_conf.phpt | 8 ++ src/tests/encrypt_cookies.phpt | 22 +++++ src/tests/encrypt_cookies2.phpt | 23 +++++ src/tests/encrypt_cookies3.phpt | 23 +++++ src/tests/encrypt_cookies4.phpt | 23 +++++ src/tests/encrypt_cookies_invalid_decryption.phpt | 23 +++++ src/tests/encrypt_cookies_invalid_decryption2.phpt | 23 +++++ src/tests/encrypt_cookies_invalid_decryption3.phpt | 21 +++++ src/tests/encryption_key_only.phpt | 13 +++ src/tests/example_configuration.phpt | 12 +++ src/tests/global_strict.phpt | 16 ++++ src/tests/global_strict_disabled.phpt | 14 +++ src/tests/harden_mt_rand.phpt | 22 +++++ src/tests/harden_rand.phpt | 24 +++++ src/tests/harden_rand_noargs.phpt | 62 ++++++++++++ src/tests/inexistent_conf_file.phpt | 10 ++ src/tests/loading.phpt | 10 ++ src/tests/noncore_function_hooking.phpt | 15 +++ src/tests/phpinfo_presence.phpt | 19 ++++ src/tests/serialize.phpt | 13 +++ src/tests/setcookie.phpt | 35 +++++++ src/tests/shipped_configuration.phpt | 12 +++ src/tests/unserialize.phpt | 13 +++ src/tests/unserialize_fail.phpt | 23 +++++ src/tests/unserialize_sim.phpt | 17 ++++ src/tests/upload_validation.phpt | 16 ++++ src/tests/upload_validation_invalid.phpt | 17 ++++ src/tests/upload_validation_ko.phpt | 14 +++ src/tests/upload_validation_no_exec.phpt | 32 +++++++ src/tests/upload_validation_nocrash.phpt | 12 +++ src/tests/upload_validation_ok.phpt | 17 ++++ 208 files changed, 2328 insertions(+) create mode 100644 src/tests/broken_conf.phpt create mode 100644 src/tests/broken_conf2.phpt create mode 100644 src/tests/broken_conf_config_regexp.phpt create mode 100644 src/tests/broken_conf_enable_disable.phpt create mode 100644 src/tests/broken_conf_expecting_bool.phpt create mode 100644 src/tests/broken_conf_expecting_int.phpt create mode 100644 src/tests/broken_conf_invalid_cidr.phpt create mode 100644 src/tests/broken_conf_invalid_cidr6.phpt create mode 100644 src/tests/broken_conf_invalid_cidr6_no_slash.phpt create mode 100644 src/tests/broken_conf_invalid_cidr6_too_big.phpt create mode 100644 src/tests/broken_conf_invalid_cidr_value.phpt create mode 100644 src/tests/broken_conf_invalid_type.phpt create mode 100644 src/tests/broken_conf_line_empty_string.phpt create mode 100644 src/tests/broken_conf_line_no_closing.phpt create mode 100644 src/tests/broken_conf_line_too_long.phpt create mode 100644 src/tests/broken_conf_lots_of_quotes.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive2.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive3.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive4.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive5.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive6.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive7.phpt create mode 100644 src/tests/broken_conf_mutually_exclusive8.phpt create mode 100644 src/tests/broken_conf_no_closing_misc.phpt create mode 100644 src/tests/broken_conf_weird_keyword.phpt create mode 100644 src/tests/broken_conf_wrong_quotes.phpt create mode 100644 src/tests/broken_conf_wrong_type.phpt create mode 100644 src/tests/broken_regexp.phpt create mode 100644 src/tests/config/borken_conf_enable_disable.ini create mode 100644 src/tests/config/broken_conf.ini create mode 100644 src/tests/config/broken_conf2.ini create mode 100644 src/tests/config/broken_conf_expecting_bool.ini create mode 100644 src/tests/config/broken_conf_expecting_int.ini create mode 100644 src/tests/config/broken_conf_invalid_cidr.ini create mode 100644 src/tests/config/broken_conf_invalid_cidr6.ini create mode 100644 src/tests/config/broken_conf_invalid_cidr6_no_slash.ini create mode 100644 src/tests/config/broken_conf_invalid_cidr6_too_big.ini create mode 100644 src/tests/config/broken_conf_invalid_cidr_value.ini create mode 100644 src/tests/config/broken_conf_invalid_type.ini create mode 100644 src/tests/config/broken_conf_line_empty_string.ini create mode 100644 src/tests/config/broken_conf_line_no_closing.ini create mode 100644 src/tests/config/broken_conf_line_too_long.ini create mode 100644 src/tests/config/broken_conf_lots_of_quotes.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive2.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive3.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive4.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive5.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive6.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive7.ini create mode 100644 src/tests/config/broken_conf_mutually_exclusive8.ini create mode 100644 src/tests/config/broken_conf_no_closing_misc.ini create mode 100644 src/tests/config/broken_conf_to_few_args.ini create mode 100644 src/tests/config/broken_conf_weird_keyword.ini create mode 100644 src/tests/config/broken_conf_wrong_quotes.ini create mode 100644 src/tests/config/broken_conf_wrong_type.ini create mode 100644 src/tests/config/broken_config_regexp.ini create mode 100644 src/tests/config/broken_regexp.ini create mode 100644 src/tests/config/config_disable_writable.ini create mode 100644 src/tests/config/config_disable_writable_disabled.ini create mode 100644 src/tests/config/config_disable_writable_simulation.ini create mode 100644 src/tests/config/config_disabled_functions_filename_r.ini create mode 100644 src/tests/config/config_disabled_functions_method.ini create mode 100644 src/tests/config/config_disabled_functions_name_r.ini create mode 100644 src/tests/config/config_disabled_functions_name_type.ini create mode 100644 src/tests/config/config_disabled_functions_namespace.ini create mode 100644 src/tests/config/config_disabled_functions_nul_byte.ini create mode 100644 src/tests/config/config_disabled_functions_param.ini create mode 100644 src/tests/config/config_disabled_functions_param_alias.ini create mode 100644 src/tests/config/config_disabled_functions_param_allow.ini create mode 100644 src/tests/config/config_disabled_functions_param_array.ini create mode 100644 src/tests/config/config_disabled_functions_param_int.ini create mode 100644 src/tests/config/config_disabled_functions_param_r.ini create mode 100644 src/tests/config/config_disabled_functions_param_runtime.ini create mode 100644 src/tests/config/config_disabled_functions_param_str_representation.ini create mode 100644 src/tests/config/config_disabled_functions_require.ini create mode 100644 src/tests/config/config_disabled_functions_ret_allow.ini create mode 100644 src/tests/config/config_disabled_functions_ret_allow_value.ini create mode 100644 src/tests/config/config_disabled_functions_ret_right_hash.ini create mode 100644 src/tests/config/config_disabled_functions_ret_simulation.ini create mode 100644 src/tests/config/config_disabled_functions_right_hash.ini create mode 100644 src/tests/config/config_disabled_user_functions.ini create mode 100644 src/tests/config/config_encrypted_cookies.ini create mode 100644 src/tests/config/config_noncore_function_hooking.ini create mode 100644 src/tests/config/config_rand_harden_disabled.ini create mode 100644 src/tests/config/config_serialize.ini create mode 100644 src/tests/config/config_serialize_sim.ini create mode 100644 src/tests/config/disable_xxe.ini create mode 100644 src/tests/config/disable_xxe_disable.ini create mode 100644 src/tests/config/disabled_function_local_var.ini create mode 100644 src/tests/config/disabled_function_super_global_var.ini create mode 100644 src/tests/config/disabled_functions.ini create mode 100644 src/tests/config/disabled_functions_cidr.ini create mode 100644 src/tests/config/disabled_functions_mb.ini create mode 100644 src/tests/config/disabled_functions_ret.ini create mode 100644 src/tests/config/disabled_functions_ret_type.ini create mode 100644 src/tests/config/disabled_functions_ret_type_double.ini create mode 100644 src/tests/config/disabled_functions_ret_type_long.ini create mode 100644 src/tests/config/disabled_functions_ret_type_resource.ini create mode 100644 src/tests/config/disabled_functions_ret_type_str.ini create mode 100644 src/tests/config/disabled_functions_ret_type_true.ini create mode 100644 src/tests/config/disabled_functions_retval.ini create mode 100644 src/tests/config/disabled_functions_retval_rx.ini create mode 100644 src/tests/config/disabled_functions_zero_cidr.ini create mode 100644 src/tests/config/dump_request.ini create mode 100644 src/tests/config/dump_request_invalid_folder.ini create mode 100644 src/tests/config/empty.ini create mode 100644 src/tests/config/empty_conf.ini create mode 100644 src/tests/config/encryption_key_only.ini create mode 100644 src/tests/config/global_strict.ini create mode 100644 src/tests/config/global_strict_disabled.ini create mode 100644 src/tests/config/harden_rand.ini create mode 100644 src/tests/config/upload_validation.ini create mode 100644 src/tests/config/upload_validation_invalid.ini create mode 100644 src/tests/config/upload_validation_ko.ini create mode 100644 src/tests/config/upload_validation_ko_simulation.ini create mode 100644 src/tests/config/upload_validation_no_exist.ini create mode 100644 src/tests/config/upload_validation_non_exec.ini create mode 100644 src/tests/config/upload_validation_ok.ini create mode 100755 src/tests/data/upload_invalid.sh create mode 100755 src/tests/data/upload_ko.sh create mode 100644 src/tests/data/upload_no_exec.sh create mode 100755 src/tests/data/upload_ok.sh create mode 100644 src/tests/deny_writable_execution.phpt create mode 100644 src/tests/deny_writable_execution_disabled.phpt create mode 100644 src/tests/deny_writable_execution_simulation.phpt create mode 100644 src/tests/disable_xxe_dom.phpt create mode 100644 src/tests/disable_xxe_dom_disabled.phpt create mode 100644 src/tests/disable_xxe_simplexml.phpt create mode 100644 src/tests/disable_xxe_simplexml_oop.phpt create mode 100644 src/tests/disable_xxe_xml_parse.phpt create mode 100644 src/tests/disabled_function_local_var.phpt create mode 100644 src/tests/disabled_function_super_global_var.phpt create mode 100644 src/tests/disabled_functions.phpt create mode 100644 src/tests/disabled_functions_cidr.phpt create mode 100644 src/tests/disabled_functions_cidr_6.phpt create mode 100644 src/tests/disabled_functions_filename_r.phpt create mode 100644 src/tests/disabled_functions_mb.phpt create mode 100644 src/tests/disabled_functions_method.phpt create mode 100644 src/tests/disabled_functions_name_r.phpt create mode 100644 src/tests/disabled_functions_name_type.phpt create mode 100644 src/tests/disabled_functions_namespace.phpt create mode 100644 src/tests/disabled_functions_noconf.phpt create mode 100644 src/tests/disabled_functions_nul_byte.phpt create mode 100644 src/tests/disabled_functions_param.phpt create mode 100644 src/tests/disabled_functions_param_alias.phpt create mode 100644 src/tests/disabled_functions_param_allow.phpt create mode 100644 src/tests/disabled_functions_param_array.phpt create mode 100644 src/tests/disabled_functions_param_int.phpt create mode 100644 src/tests/disabled_functions_param_r.phpt create mode 100644 src/tests/disabled_functions_param_str_representation.phpt create mode 100644 src/tests/disabled_functions_parse_class.phpt create mode 100644 src/tests/disabled_functions_require.phpt create mode 100644 src/tests/disabled_functions_ret.phpt create mode 100644 src/tests/disabled_functions_ret2.phpt create mode 100644 src/tests/disabled_functions_ret3.phpt create mode 100644 src/tests/disabled_functions_ret_allow.phpt create mode 100644 src/tests/disabled_functions_ret_allow_value.phpt create mode 100644 src/tests/disabled_functions_ret_right_hash.phpt create mode 100644 src/tests/disabled_functions_ret_simulation.phpt create mode 100644 src/tests/disabled_functions_ret_type.phpt create mode 100644 src/tests/disabled_functions_ret_type_double.phpt create mode 100644 src/tests/disabled_functions_ret_type_long.phpt create mode 100644 src/tests/disabled_functions_ret_type_resource.phpt create mode 100644 src/tests/disabled_functions_ret_type_str.phpt create mode 100644 src/tests/disabled_functions_ret_type_true.phpt create mode 100644 src/tests/disabled_functions_ret_val.phpt create mode 100644 src/tests/disabled_functions_ret_val_rx.phpt create mode 100644 src/tests/disabled_functions_right_hash.phpt create mode 100644 src/tests/disabled_functions_runtime.phpt create mode 100644 src/tests/disabled_functions_zero_cidr.phpt create mode 100644 src/tests/disabled_option.phpt create mode 100644 src/tests/disabled_user_functions.phpt create mode 100644 src/tests/dump_request.phpt create mode 100644 src/tests/dump_request_invalid_folder.phpt create mode 100644 src/tests/dump_request_too_big.phpt create mode 100644 src/tests/empty_conf.phpt create mode 100644 src/tests/encrypt_cookies.phpt create mode 100644 src/tests/encrypt_cookies2.phpt create mode 100644 src/tests/encrypt_cookies3.phpt create mode 100644 src/tests/encrypt_cookies4.phpt create mode 100644 src/tests/encrypt_cookies_invalid_decryption.phpt create mode 100644 src/tests/encrypt_cookies_invalid_decryption2.phpt create mode 100644 src/tests/encrypt_cookies_invalid_decryption3.phpt create mode 100644 src/tests/encryption_key_only.phpt create mode 100644 src/tests/example_configuration.phpt create mode 100644 src/tests/global_strict.phpt create mode 100644 src/tests/global_strict_disabled.phpt create mode 100644 src/tests/harden_mt_rand.phpt create mode 100644 src/tests/harden_rand.phpt create mode 100644 src/tests/harden_rand_noargs.phpt create mode 100644 src/tests/inexistent_conf_file.phpt create mode 100644 src/tests/loading.phpt create mode 100644 src/tests/noncore_function_hooking.phpt create mode 100644 src/tests/phpinfo_presence.phpt create mode 100644 src/tests/serialize.phpt create mode 100644 src/tests/setcookie.phpt create mode 100644 src/tests/shipped_configuration.phpt create mode 100644 src/tests/unserialize.phpt create mode 100644 src/tests/unserialize_fail.phpt create mode 100644 src/tests/unserialize_sim.phpt create mode 100644 src/tests/upload_validation.phpt create mode 100644 src/tests/upload_validation_invalid.phpt create mode 100644 src/tests/upload_validation_ko.phpt create mode 100644 src/tests/upload_validation_no_exec.phpt create mode 100644 src/tests/upload_validation_nocrash.phpt create mode 100644 src/tests/upload_validation_ok.phpt (limited to 'src/tests') 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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf.ini +--FILE-- +--EXPECT-- +[snuffleupagus][0.0.0.0][config][error] Invalid configuration prefix for 'this is a broken line'. + 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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf2.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_config_regexp.ini +--FILE-- +--EXPECT-- +[snuffleupagus][0.0.0.0][config][error] Failed to compile '*.': nothing to repeat. +[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 @@ +--TEST-- +Global strict mode +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/borken_conf_enable_disable.ini +--FILE-- +--EXPECTF-- +[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 @@ +--TEST-- +Bad boolean value in configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_expecting_bool.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Bad integer value in configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_expecting_int.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_cidr.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration, invalid cidr for ipv6 because there is no `/` in it +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6_no_slash.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration, cidr for ipv6 is too big, that will `mod` to 25. +(13337%128 = 25) +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_cidr6_too_big.ini +--FILE-- +--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 @@ +--TEST-- +Broken configuration, invalid cidr value +(13337%128 = 25) +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_cidr_value.ini +--FILE-- +--EXPECT-- +[snuffleupagus][0.0.0.0][error][error] There is an issue with the parsing of '"': it doesn't look like a valid string. +[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 @@ +--TEST-- +Broken conf with wrong type +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_invalid_type.ini +--FILE-- +--EXPECTF-- +[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 @@ +--TEST-- +Configuration line with an empty string +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_line_empty_string.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Configuration line without closing parenthese +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_line_no_closing.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Line too long in configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_line_too_long.ini +--FILE-- +--EXPECT-- +[snuffleupagus][0.0.0.0][config][error] The following line is too long: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111);. +[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 @@ +--TEST-- +Configuration line with too many quotes +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_lots_of_quotes.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive2.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive3.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive4.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive5.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive6.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive7.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_mutually_exclusive8.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Configuration line without closing parenthese, misc +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_no_closing_misc.ini +--FILE-- +--EXPECT-- +[snuffleupagus][0.0.0.0][config][error] Missing closing ) in line 123. +[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 @@ +--TEST-- +Bad config, unknown keyword +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_weird_keyword.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Configuration line with too many quotes +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_wrong_quotes.ini +--FILE-- +--EXPECT-- +[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 @@ +--TEST-- +Broken conf with wrong type +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_conf_wrong_type.ini +--FILE-- +--EXPECTF-- +[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 @@ +--TEST-- +Broken regexp +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/broken_regexp.ini +--FILE-- +--EXPECTF-- +[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 @@ + # this is an example of broken conf + + + ; this is another comment +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 @@ +sp.global.secret_key("abcdef"); +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 @@ +sp.disable_functions.function("strpos").ret_type("undef").drop().alias("Return value is undef"); +sp.disable_functions.function("strpos").ret_type("null").drop().alias("Return value is null"); +sp.disable_functions.function("strpos").ret_type("object").drop().alias("Return value is object"); +sp.disable_functions.function("strpos").ret_type("reference").drop().alias("Return value is reference"); +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 @@ +sp.disable_functions.function_r("^system$").filename_r("\\.txt$").drop(); +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 @@ +sp.disable_functions.function("AwesomeClass::method1").drop(); +sp.disable_functions.function("method2").drop(); +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 @@ +sp.disable_functions.function_r("^not_system$").ret("42").drop(); +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 @@ +sp.disable_functions.function("strcmp").drop(); +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 @@ +sp.disable_functions.function("system").param("command").value_r("^id$").alias("1").drop(); +sp.disable_functions.function("array_sum").param("array").value_r("^8$").alias("2").drop(); +sp.disable_functions.function("shell_exec").param("cmd").value("id").alias("3").drop(); +sp.disable_functions.function("shell_exec").param("cmd").value("bla").alias("4").drop(); +sp.disable_functions.function("strcmp").param("str1").value("bla").alias("5").drop().simulation(); +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 @@ +sp.disable_functions.function("system").alias("1").drop(); +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 @@ +sp.disable_functions.function("system").param("command").value("echo win").filename("test.php").drop(); +sp.disable_functions.function("system").param("command").value("echo win").allow(); +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 @@ +sp.disable_functions.function("foo").param("arr").value("abcd").alias("1").drop(); +sp.disable_functions.function("foo").param("arr[bla]").value("abcdef").alias("2").drop(); +sp.disable_functions.function("foo").param("arr[test]").alias("3").drop(); +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 @@ +sp.disable_functions.function("foobar").param("id").value("42").drop(); +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 @@ +sp.disable_functions.function("strpos").hash("70b33f3eaf585b245640bb2c92445d0040b2bcb31395aa25dede9f2df4dbcbe8").allow(); +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 @@ +sp.disable_functions.function("system").ret("1").drop(); +sp.disable_functions.function("system").ret("1337").hash("123456789597a81a2b862cdb49920e2cba2e5979a3fc374c58c803e8f5c99a10").drop(); +sp.disable_functions.function("system").ret("1338").hash("522a976fa597a81a2b862cdb49920e2cba2e5979a3fc374c58c803e8f5c99a10").drop(); +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 @@ +sp.disable_functions.function("strpos").ret("0").simulation().drop(); +sp.disable_functions.function("stripos").ret("0").simulation().drop().alias("1"); +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 @@ +sp.disable_functions.function("system").hash("1337c3ad8cf096272cd0e78768af3b11325f498de5c2c36f40adc43643af378a").allow(); +sp.disable_functions.function("system").hash("d259c3ad8cf096272cd0e78768af3b11325f498de5c2c36f40adc43643af378a").allow(); +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 @@ +sp.global.secret_key("abcdef"); +sp.cookie_encryption.cookie("super_cookie").mask_ipv4(8).mask_ipv6(2); +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 @@ +sp.global.secret_key("abcdef"); +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 @@ +sp.global.secret_key("abcdef"); +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 @@ +sp.disable_functions.function("phpinfo").var("b").value("1337").drop(); +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 @@ +sp.disable_functions.function("system").drop(); +sp.disable_functions.function("vprintf").hash("123456789").drop(); +sp.disable_functions.function("printf").disable().drop(); +sp.disable_functions.function("printf").simulation().drop(); +sp.disable_functions.function("print").disable().drop(); # this is a comment +sp.disable_functions.function_r("^var_dump$").drop(); +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 @@ +sp.disable_functions.function("system").drop().cidr("127.0.0.1/8"); +sp.disable_functions.function("printf").drop().cidr("10.0.0.1/8"); +sp.disable_functions.function("strpos").drop().cidr("2001:0db8:0000:0000:0000:ff00:0042:8329/24"); +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 @@ +sp.disable_functions.function("strlen").drop(); +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 @@ +sp.disable_functions.function("testFunction").ret("0").drop().disable(); +sp.disable_functions.function("strpos").ret("0").drop().filename_r(".*\\.php"); +sp.disable_functions.function_r("str[ia]pos").ret_r("^[^a-z]+$").drop(); +sp.disable_functions.function_r("stripos").ret_r("^[^a-z]+").drop(); +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 diff --git a/src/tests/config/empty_conf.ini b/src/tests/config/empty_conf.ini new file mode 100644 index 0000000..e69de29 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 @@ +sp.upload_validation.script("tests/upload_ko.sh"); +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 @@ +#!/bin/sh +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 @@ +#!/bin/sh +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 @@ +#!/bin/sh +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 @@ +--TEST-- +Readonly execution attempt +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disable_writable.ini +--FILE-- + +--EXPECTF-- +Code execution within a non-writable file. +[snuffleupagus][0.0.0.0][readonly_exec][drop] Attempted execution of a writable file (%a/writable_file.txt). +--CLEAN-- + \ 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 @@ +--TEST-- +Readonly execution attempt +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disable_writable_disabled.ini +--FILE-- + +--EXPECT-- +Code execution within a writable file. +Code execution within a non-writable file. +--CLEAN-- + \ 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 @@ +--TEST-- +Readonly execution attempt (simulation mode) +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disable_writable_simulation.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][readonly_exec][notice] Attempted execution of a writable file (%a/writable_file.txt). +Code execution within a writable file. +Code execution within a non-writable file. +--CLEAN-- + \ 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 @@ +--TEST-- +Disable XXE +--SKIPIF-- + +--INI-- +extension=`php-config --extension-dir`/dom.so +sp.configuration_file={PWD}/config/disable_xxe.ini +--FILE-- + + +]> +&foo; +EOD; + +file_put_contents('content.xml', $xml); + +libxml_disable_entity_loader(true); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("libxml_disable_entity to true: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +libxml_disable_entity_loader(false); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("libxml_disable_entity to false: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +$xml = "foo"; +file_put_contents('content.xml', $xml); + +libxml_disable_entity_loader(false); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("without xxe: %s", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +?> +--EXPECTF-- +Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file://%a/content.txt" in %a/disable_xxe_dom.php on line %d + +Warning: DOMDocument::loadXML(): Failure to process entity foo in Entity, line: %d in %a/disable_xxe_dom.php on line %d + +Warning: DOMDocument::loadXML(): Entity 'foo' not defined in Entity, line: %d in %a/disable_xxe_dom.php on line %d + +Notice: Trying to get property of non-object in %a/disable_xxe_dom.php on line %d +libxml_disable_entity to true: + +Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file://%a/content.txt" in %a/disable_xxe_dom.php on line %d + +Warning: DOMDocument::loadXML(): Failure to process entity foo in Entity, line: %d in %a/disable_xxe_dom.php on line %d + +Warning: DOMDocument::loadXML(): Entity 'foo' not defined in Entity, line: %d in %a/disable_xxe_dom.php on line %d + +Notice: Trying to get property of non-object in %a/disable_xxe_dom.php on line %d +libxml_disable_entity to false: +without xxe: foo +--CLEAN-- + 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 @@ +--TEST-- +Disable XXE +--SKIPIF-- + +--INI-- +extension=`php-config --extension-dir`/dom.so +sp.configuration_file={PWD}/config/disable_xxe_disable.ini +--FILE-- +WARNING, external entity loaded!'; +file_put_contents($dir . '/content.txt', $content); + +$xml = << + +]> +&foo; +EOD; + +file_put_contents($dir . '/content.xml', $xml); + +libxml_disable_entity_loader(true); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("libxml_disable_entity to true: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +libxml_disable_entity_loader(false); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("libxml_disable_entity to false: %s\n", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +$xml = "foo"; +file_put_contents('content.xml', $xml); + +libxml_disable_entity_loader(false); +$dom = new DOMDocument('1.0'); +$dom->loadXML($xml, LIBXML_DTDATTR|LIBXML_DTDLOAD|LIBXML_NOENT); +printf("without xxe: %s", $dom->getElementsByTagName('testing')->item(0)->nodeValue); + +?> +--EXPECTF-- +libxml_disable_entity to true: WARNING, external entity loaded! +libxml_disable_entity to false: WARNING, external entity loaded! +without xxe: foo +--CLEAN-- + 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 @@ +--TEST-- +Disable XXE +--SKIPIF-- + +--INI-- +extension=`php-config --extension-dir`/simplexml.so +sp.configuration_file={PWD}/config/disable_xxe.ini +--FILE-- + + +]> +&foo; +EOD; + +file_put_contents('content.xml', $xml); + +libxml_disable_entity_loader(true); +$doc = new SimpleXMLElement($xml); +printf("libxml_disable_entity to true: %s\n", $doc->testing); + +libxml_disable_entity_loader(false); +$doc = new SimpleXMLElement($xml); +printf("libxml_disable_entity to false: %s\n", $doc->testing); + +$xml = "foo"; +file_put_contents('content.xml', $xml); + +$doc = new SimpleXMLElement($xml); +printf("without xxe: %s", $doc->testing); + +?> +--EXPECT-- +libxml_disable_entity to true: +libxml_disable_entity to false: +without xxe: foo +--CLEAN-- + 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 @@ +--TEST-- +Disable XXE +--SKIPIF-- + +--INI-- +extension=`php-config --extension-dir`/simplexml.so +sp.configuration_file={PWD}/config/disable_xxe.ini +--FILE-- + + +]> +&foo; +EOD; + +file_put_contents('content.xml', $xml); + +libxml_disable_entity_loader(true); +$doc = simplexml_load_string($xml); +printf("libxml_disable_entity to true: %s\n", $doc->testing); + +libxml_disable_entity_loader(false); +$doc = simplexml_load_string($xml); +printf("libxml_disable_entity to false: %s\n", $doc->testing); + +$xml = "foo"; +file_put_contents('content.xml', $xml); + +$doc = simplexml_load_string($xml); +printf("without xxe: %s", $doc->testing); + +?> +--EXPECT-- +libxml_disable_entity to true: +libxml_disable_entity to false: +without xxe: foo +--CLEAN-- + 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 @@ +--TEST-- +Disable XXE +--SKIPIF-- + +--INI-- +extension=`php-config --extension-dir`/xml.so +sp.configuration_file={PWD}/config/disable_xxe.ini +--FILE-- + + +]> +&foo; +EOD; + +file_put_contents('content.xml', $xml); + +function create_parser() { + $parser = xml_parser_create(); + xml_set_element_handler( + $parser, + function($parser, $name, array $attributes) { + var_dump($name); + echo "\n"; + var_dump($attributes); + }, + function($parser, $name) { + var_dump($name); + } + ); + + xml_set_character_data_handler( + $parser, + function ($parser, $text){ + echo 'text' . $text; + } + ); + + return $parser; +} + +libxml_disable_entity_loader(true); +$parser = create_parser(); +$doc = xml_parse($parser, $xml, true); +xml_parser_free($parser); + +libxml_disable_entity_loader(false); +$parser = create_parser(); +$doc = xml_parse($parser, $xml, true); +xml_parser_free($parser); + +$xml = "foo"; +file_put_contents('content.xml', $xml); +$parser = create_parser(); +$doc = xml_parse($parser, $xml, true); +xml_parser_free($parser); + +--EXPECT-- +string(4) "TEST" + +array(0) { +} +string(7) "TESTING" + +array(0) { +} +string(7) "TESTING" +string(4) "TEST" +string(4) "TEST" + +array(0) { +} +string(7) "TESTING" + +array(0) { +} +string(7) "TESTING" +string(4) "TEST" +string(4) "TEST" + +array(0) { +} +string(7) "TESTING" + +array(0) { +} +textfoostring(7) "TESTING" +string(4) "TEST" +--CLEAN-- + 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 @@ +--TEST-- +Disable functions - match on a local variable +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_function_local_var.ini +--FILE-- + +--EXPECTF-- +Value of a: 1338 +2 +Value of a: 1337 +[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 @@ +--TEST-- +Disable functions - match on a super global +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_function_super_global_var.ini +--GET-- +bla=test +--FILE-- + +--EXPECTF-- +4 +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][disabled_function][drop] The call to the function 'system' in %a/tests/disabled_functions.php:%d has been disabled. +[snuffleupagus][0.0.0.0][disabled_function][notice] The call to the function 'printf' in %a/tests/disabled_functions.php:%d has been disabled. +printf in simulation mode +print in disabled mode +[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. +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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--ENV-- +return << +--EXPECTF-- +[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. +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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--ENV-- +return << +--EXPECTF-- +[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. +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 @@ +--TEST-- +Disable functions - filename regexp +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_filename_r.ini +--FILE-- + +--EXPECTF-- +42 +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_mb.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_method.ini +--FILE-- +method1("pif"); +$c->method2("paf"); +$c->method3("pouet"); +?> +--EXPECTF-- +[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. +method2:paf +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_name_r.ini +--FILE-- + +--EXPECTF-- +42 +1337 +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_name_type.ini +--FILE-- + +--EXPECTF-- +0 +[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 @@ +--TEST-- +Disable functions: namespaces support isn't implemented now +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_namespace.ini +--FILE-- + +--XFAIL-- +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/empty.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Disable functions with nul byte +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_nul_byte.ini +--FILE-- + +--EXPECTF-- +[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. +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param.ini +--FILE-- + +--EXPECTF-- +[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'. +win +int(15) +[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'. +42 +[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'. +[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 @@ +--TEST-- +Disable functions - alias +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_alias.ini +--FILE-- + +--EXPECTF-- +[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'. +[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 @@ +--TEST-- +Disable functions - allow +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_allow.ini +--FILE-- + +--EXPECTF-- +win +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_array.ini +--FILE-- +"test1"); +foo($a); +$a=Array("a"=>"abcd"); +foo($a); +$a=Array("a"=>"abcde"); +foo($a); +$a=Array("bla"=>"abcdef"); +foo($a); +$a=Array("bla"=>"aaa", "a"=>"eee" ); +foo($a); +$a=Array("test"=>"aaa", "a"=>"fff" ); +foo($a); +$a=Array("test2"=>Array("foo"=>Array("lol"=>"bbb")), "a"=>"cccc"); +foo($a); +$a=Array("test2"=>Array("foo"=>Array("lol"=>"aaa")), "a"=>"dddd"); +foo($a); +?> +--EXPECTF-- +test1 +[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'. +abcde +[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'. +eee +[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'. +cccc +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_int.ini +--FILE-- + +--EXPECTF-- +1 +[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. +[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. +[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. +[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. +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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_r.ini +--FILE-- + +--EXPECTF-- +[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. +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 @@ +--TEST-- +Disable functions - casting various types to string internally +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_str_representation.ini +--FILE-- + +--EXPECTF-- +true +false +NULL +1 +1.0 +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 @@ +--TEST-- +Disable functions - Parsing of an Object as a return value of a function +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret.ini +--FILE-- +a() instanceof StdClass)?'Y':'N'; +?> +--EXPECT-- +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 @@ +--TEST-- +Disable functions - Require +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_require.ini +--FILE-- + +--XFAIL-- +PHP doesn't replace the format string, so the test is failing. +--EXPECTF-- +[snuffleupagus][0.0.0.0][include][drop] Inclusion of a forbidden file (%a/test.bla) +--CLEAN-- + 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 @@ +--TEST-- +Disable functions check on `ret`. +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret`. +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret`. +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret.ini +--FILE-- +a() . ".\n"; +echo("We're at the end of the execution.\n"); +?> +--EXPECTF-- +We're in function `a`. +`a` returned: 1. +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 @@ +--TEST-- +Disable functions check on `ret`. +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_ret_allow.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Disable functions check on `ret` allowed +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_ret_allow_value.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_ret_right_hash.ini +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Disable functions check on `ret` simulation +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_ret_simulation.ini +--FILE-- + +--EXPECTF-- +[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. +0 +[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'. +0 +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching on boolean +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type.ini +--FILE-- + +--EXPECTF-- +0 +1337 +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching (double). +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type_double.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching (long). +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type_long.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching (resource). +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type_resource.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching (string). +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type_str.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Disable functions check on `ret` by type matching (true). +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_ret_type_true.ini +--FILE-- + +--EXPECTF-- +bool(false) +1337 +[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 @@ +--TEST-- +Disable functions ret val +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_retval.ini +--FILE-- + +--EXPECTF-- +fufu +[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 @@ +--TEST-- +Disable functions ret val rx +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/disabled_functions_retval_rx.ini +--FILE-- + +--EXPECTF-- +fufu +[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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_right_hash.ini +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Disable functions - runtime inclusion +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_functions_param_runtime.ini +--FILE-- + +--EXPECTF-- +1338 +[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. +--CLEAN-- + 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 @@ +--TEST-- +Disable functions +--SKIPIF-- + +--ENV-- +return << +--EXPECTF-- +[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. +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 @@ +--TEST-- +Harden rand +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_rand_harden_disabled.ini +--FILE-- + +--EXPECT-- +84 +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 @@ +--TEST-- +Disabled user-created functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_disabled_user_functions.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Dump request +--SKIPIF-- + +--POST-- +post_a=data_post_a&post_b=data_post_b +--GET-- +get_a=data_get_a&get_b=data_get_b +--COOKIE-- +cookie_a=data_cookie_a&cookie_b=data_cookie_b +--INI-- +sp.configuration_file={PWD}/config/dump_request.ini +--FILE-- + +--EXPECTF-- +1 +[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 @@ +--TEST-- +Dump request - invalid folder. +--SKIPIF-- + +--POST-- +post_a=data_post_a&post_b=data_post_b +--GET-- +get_a=data_get_a&get_b=data_get_b +--COOKIE-- +cookie_a=data_cookie_a&cookie_b=data_cookie_b +--INI-- +sp.configuration_file={PWD}/config/dump_request_invalid_folder.ini +--FILE-- + +--EXPECTF-- +1 +[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. +[snuffleupagus][0.0.0.0][request_logging][error] Unable to open /root/NON_EXISTENT/FOLDER/PLEASE/sp_dump_%a_0.0.0.0.dump +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 @@ +--TEST-- +Dump request -- to big, so it's truncated. +--SKIPIF-- + +--POST-- +post_a=data_post_a&post_b=data_post_b&post_c=c +--GET-- +get_a=data_get_a&get_b=data_get_b&get_c=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBBB +--COOKIE-- +cookie_a=data_cookie_a&cookie_b=data_cookie_b&data_cookie_c=cookie_c +--ENV-- +return << +--EXPECTF-- +1 +[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 @@ +--TEST-- +Empty configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/empty_conf.ini +--FILE-- +--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 @@ +--TEST-- +Cookie decryption in ipv4 +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +super_cookie=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEmXkk3H0xheoOMxoWPEDw1Zd8NAmD9KbB2DSjQ=%3d;awful_cookie=awful_cookie_value; +--ENV-- +return << +--EXPECT-- +array(2) { + ["super_cookie"]=> + string(11) "super_value" + ["awful_cookie"]=> + string(18) "awful_cookie_value" +} 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 @@ +--TEST-- +Cookie encryption in ipv4 +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +--ENV-- +return << +--EXPECT-- +array(0) { +} 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 @@ +--TEST-- +Cookie decryption with ipv6 +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +super_cookie=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJNTUge7MpiVNi4q3DqstbcumllXBir0CbIQiDI%3D;awful_cookie=awful_cookie_value; +--ENV-- +return << +--EXPECT-- +array(2) { + ["super_cookie"]=> + string(11) "super_value" + ["awful_cookie"]=> + string(18) "awful_cookie_value" +} 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 @@ +--TEST-- +Cookie encryption in ipv6 +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +--ENV-- +return << +--EXPECT-- +array(0) { +} 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 @@ +--TEST-- +Cookie encryption +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +display_errors=1 +display_startup_errors=1 +error_reporting=E_ALL +--COOKIE-- +super_cookie=jWjORGsgZyqzk3WA63XZBmUoSknXWnXDfAAAAAAAAAAAAAAAAAAAAAA7LiMDfkpP94jDnMVH%2Fm41GeL0Y00q3mbOFYz%2FS9mQGySu;awful_cookie=awful_cookie_value; +--ENV-- +return << +--EXPECT-- + +array(1) { + ["awful_cookie"]=> + string(18) "awful_cookie_value" +} 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 @@ +--TEST-- +Cookie encryption +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +display_errors=1 +display_startup_errors=1 +error_reporting=E_ALL +--COOKIE-- +super_cookie=1337;awful_cookie=awful_cookie_value; +--ENV-- +return << +--EXPECT-- + +array(1) { + ["awful_cookie"]=> + string(18) "awful_cookie_value" +} 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 @@ +--TEST-- +Cookie encryption +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +super_cookie=;awful_cookie=awful_cookie_value; +--ENV-- +return << +--EXPECT-- +array(2) { + ["super_cookie"]=> + string(0) "" + ["awful_cookie"]=> + string(18) "awful_cookie_value" +} 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 @@ +--TEST-- +Encryption key only +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/encryption_key_only.ini +--FILE-- + +--EXPECT-- +1337 + 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 @@ +--TEST-- +Shipped configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/../../config/examples.ini +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Global strict mode +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/global_strict.ini +--FILE-- + +--EXPECTF-- +Fatal error: Uncaught TypeError: strcmp() expects parameter 2 to be string, array given in %a/global_strict.php:2 +Stack trace: +#0 %a/global_strict.php(2): strcmp('pouet', Array) +#1 {main} + 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 @@ +--TEST-- +Global strict mode +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/global_strict_disabled.ini +--FILE-- + +--EXPECTF-- +Warning: strcmp() expects parameter 2 to be string, array given in %a/global_strict_disabled.php on line 2 +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 @@ +--TEST-- +Harden mt_rand +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/harden_rand.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Harden rand +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/harden_rand.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Harden rand without any arguments +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/harden_rand.ini +We should fix this +--FILE-- + +--EXPECTF-- +Warning: rand() expects exactly 2 parameters, 1 given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand() expects exactly 2 parameters, 1 given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand(): max(1) is smaller than min(2) in %s/tests/harden_rand_noargs.php on line %d + +Warning: rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d + +Warning: rand() expects parameter 1 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand() expects parameter 1 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d + +Warning: rand() expects parameter 2 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand() expects parameter 2 to be integer, string given in %s/tests/harden_rand_noargs.php on line %d + +Warning: rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d + +Warning: mt_rand() expects exactly 2 parameters, 3 given in %s/tests/harden_rand_noargs.php on line %d +Everything is fine +Absolutely everything +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 @@ +--TEST-- +Check for snuffleupagus presence +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/unexistent_configuration_file.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Check for snuffleupagus presence +--SKIPIF-- + +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Hooking of user-defined functions +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_noncore_function_hooking.ini +--FILE-- + +--EXPECTF-- +[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 @@ +--TEST-- +Unserialize fail +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_serialize.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Test serialize hmac +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_serialize.ini +--FILE-- + +--EXPECT-- +s:1:"a";650609b417904d0d9bbf1fc44a975d13ecdf6b02b715c1a06271fb3b673f25b1 + 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 @@ +--TEST-- +Set cookies. +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_encrypted_cookies.ini +--COOKIE-- +--ENV-- +return << +--EXPECTF-- +Warning: setcookie() expects at most 7 parameters, 8 given in %a/setcookie.php on line %d + +Warning: setcookie() expects at least 1 parameter, 0 given in %a/setcookie.php on line %d +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 @@ +--TEST-- +Shipped configuration +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/../../config/default.ini +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Unserialize ok +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_serialize.ini +--FILE-- + +--EXPECT-- +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 @@ +--TEST-- +Unserialize fail +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_serialize.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][unserialize][drop] The serialized object is too small. +bool(false) +[snuffleupagus][0.0.0.0][unserialize][drop] Invalid HMAC for s:1:"a";alyualskdufyhalkdjsfh +NULL +[snuffleupagus][0.0.0.0][unserialize][drop] The serialized object is too small. +bool(false) + +Warning: unserialize() expects at most 2 parameters, 4 given in %a/tests/unserialize_fail.php on line %d +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 @@ +--TEST-- +Unserialize ok +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_serialize_sim.ini +--FILE-- + +--EXPECT-- +s:1:"a";650609b417904d0d9bbf1fc44a975d13ecdf6b02b715c1a06271fb3b673f25b1string(1) "a" +[snuffleupagus][0.0.0.0][unserialize][notice] Invalid HMAC for s:1:"a";alyualskdufyhalkdjsfh +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 @@ +--TEST-- +Upload a file, validation ok, no simulation +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation.ini +--POST_RAW-- +Content-Type: multipart/form-data; boundary=blabla +--blabla +Content-Disposition: form-data; name="test"; filename="test.php" +--blabla-- +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Upload a file, invalid validation script +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation_invalid.ini +--POST_RAW-- +Content-Type: multipart/form-data; boundary=blabla +--blabla +Content-Disposition: form-data; name="test"; filename="test.php" +--blabla-- +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][upload_validation][error] Could not call './tests/data/upload_invalid.sh' : Exec format error +[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 @@ +--TEST-- +Upload a file, validation ko, no simulation +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation_ko.ini +output_buffering=off +--POST_RAW-- +Content-Type: multipart/form-data; boundary=blabla +--blabla +Content-Disposition: form-data; name="test"; filename="test.php" +--blabla-- +--FILE-- +--EXPECTF-- +[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 @@ +--TEST-- +Upload a file, validation script not executable +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation_non_exec.ini +output_buffering=off +--POST_RAW-- +Content-Type: multipart/form-data; boundary=blabla +--blabla +Content-Disposition: form-data; name="test"; filename="test.php" +--blabla-- +--FILE-- + +--EXPECTF-- +array(1) { + ["test"]=> + array(5) { + ["name"]=> + string(8) "test.php" + ["type"]=> + string(0) "" + ["tmp_name"]=> + string(0) "" + ["error"]=> + int(3) + ["size"]=> + int(0) + } +} 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 @@ +--TEST-- +Upload validation isn't crashing +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation_ok.ini +output_buffering=off +--FILE-- + +--EXPECTF-- +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 @@ +--TEST-- +Upload a file, validation ok, no simulation +--INI-- +file_uploads=1 +sp.configuration_file={PWD}/config/upload_validation_ok.ini +output_buffering=off +--POST_RAW-- +Content-Type: multipart/form-data; boundary=blabla +--blabla +Content-Disposition: form-data; name="test"; filename="test.php" +--blabla-- +--FILE-- + +--EXPECTF-- +1 -- cgit v1.3