From f3d5d251875ee7f854a3df38709eedef4c6d1a31 Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Tue, 10 Aug 2021 16:45:40 +0200 Subject: prevent option to be enabled and then disabled --- src/sp_config_keywords.c | 2 +- .../broken_configuration/broken_conf_enable_disable2.phpt | 15 +++++++++++++++ .../config/broken_conf_enable_disable2.ini | 2 ++ .../broken_conf_enable_disable2.phpt | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/tests/broken_configuration/broken_conf_enable_disable2.phpt create mode 100644 src/tests/broken_configuration/config/broken_conf_enable_disable2.ini create mode 100644 src/tests/broken_configuration_php8/broken_conf_enable_disable2.phpt (limited to 'src') diff --git a/src/sp_config_keywords.c b/src/sp_config_keywords.c index b627122..a177a5e 100644 --- a/src/sp_config_keywords.c +++ b/src/sp_config_keywords.c @@ -1,7 +1,7 @@ #include "php_snuffleupagus.h" #define SP_SET_ENABLE_DISABLE(enable, disable, varname) \ - if (enable && disable) { \ + if (((varname) || enable) && disable) { \ sp_log_err("config", "A rule can't be enabled and disabled on line %zu", sp_line_no); \ return -1; \ } \ diff --git a/src/tests/broken_configuration/broken_conf_enable_disable2.phpt b/src/tests/broken_configuration/broken_conf_enable_disable2.phpt new file mode 100644 index 0000000..0d6fb8c --- /dev/null +++ b/src/tests/broken_configuration/broken_conf_enable_disable2.phpt @@ -0,0 +1,15 @@ +--TEST-- +Global strict mode +--SKIPIF-- + += 80000) print "skip"; ?> +--INI-- +sp.configuration_file={PWD}/../broken_configuration/config/broken_conf_enable_disable2.ini +--FILE-- +--EXPECTF-- +PHP Fatal error: [snuffleupagus][0.0.0.0][config][log] A rule can't be enabled and disabled on line 2 in Unknown on line 0 + +Fatal error: [snuffleupagus][0.0.0.0][config][log] A rule can't be enabled and disabled on line 2 in Unknown on line 0 + +Fatal error: [snuffleupagus][0.0.0.0][config][log] Invalid configuration file in Unknown on line 0 +Could not startup. diff --git a/src/tests/broken_configuration/config/broken_conf_enable_disable2.ini b/src/tests/broken_configuration/config/broken_conf_enable_disable2.ini new file mode 100644 index 0000000..39d97cc --- /dev/null +++ b/src/tests/broken_configuration/config/broken_conf_enable_disable2.ini @@ -0,0 +1,2 @@ +sp.global_strict.enable(); +sp.global_strict.disable(); diff --git a/src/tests/broken_configuration_php8/broken_conf_enable_disable2.phpt b/src/tests/broken_configuration_php8/broken_conf_enable_disable2.phpt new file mode 100644 index 0000000..efe5538 --- /dev/null +++ b/src/tests/broken_configuration_php8/broken_conf_enable_disable2.phpt @@ -0,0 +1,14 @@ +--TEST-- +Global strict mode +--SKIPIF-- + + +--INI-- +sp.configuration_file={PWD}/../broken_configuration/config/broken_conf_enable_disable2.ini +--FILE-- +--EXPECTF-- + +Fatal error: [snuffleupagus][0.0.0.0][config][log] A rule can't be enabled and disabled on line 2 in Unknown on line 0 + +Fatal error: [snuffleupagus][0.0.0.0][config][log] Invalid configuration file in Unknown on line 0 +Could not startup. -- cgit v1.3