summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sp_execute.c14
-rw-r--r--src/tests/config/config_disabled_functions_ret_user.ini1
-rw-r--r--src/tests/disabled_functions_ret_user.phpt16
-rw-r--r--src/tests/disabled_functions_ret_user_used.phpt15
4 files changed, 40 insertions, 6 deletions
diff --git a/src/sp_execute.c b/src/sp_execute.c
index 4b7d6d0..844647e 100644
--- a/src/sp_execute.c
+++ b/src/sp_execute.c
@@ -187,14 +187,16 @@ static void sp_execute_ex(zend_execute_data *execute_data) {
187 187
188 orig_execute_ex(execute_data); 188 orig_execute_ex(execute_data);
189 189
190 if (UNEXPECTED( 190 if (EX(return_value) != NULL) {
191 if (UNEXPECTED(
191 true == 192 true ==
192 should_drop_on_ret_ht( 193 should_drop_on_ret_ht(
193 EX(return_value), function_name, 194 EX(return_value), function_name,
194 SNUFFLEUPAGUS_G(config) 195 SNUFFLEUPAGUS_G(config)
195 .config_disabled_functions_reg_ret->disabled_functions, 196 .config_disabled_functions_reg_ret->disabled_functions,
196 SNUFFLEUPAGUS_G(config).config_disabled_functions_ret))) { 197 SNUFFLEUPAGUS_G(config).config_disabled_functions_ret))) {
197 sp_terminate(); 198 sp_terminate();
199 }
198 } 200 }
199 efree(function_name); 201 efree(function_name);
200 } else { 202 } else {
diff --git a/src/tests/config/config_disabled_functions_ret_user.ini b/src/tests/config/config_disabled_functions_ret_user.ini
new file mode 100644
index 0000000..d214376
--- /dev/null
+++ b/src/tests/config/config_disabled_functions_ret_user.ini
@@ -0,0 +1 @@
sp.disable_function.function("qwe").ret("asd").drop();
diff --git a/src/tests/disabled_functions_ret_user.phpt b/src/tests/disabled_functions_ret_user.phpt
new file mode 100644
index 0000000..597a6b8
--- /dev/null
+++ b/src/tests/disabled_functions_ret_user.phpt
@@ -0,0 +1,16 @@
1--TEST--
2Check NULL return value for user func
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_ret_user.ini
7--FILE--
8<?php
9function qwe() {
10 return "asd";
11}
12qwe();
13echo 1;
14?>
15--EXPECT--
161
diff --git a/src/tests/disabled_functions_ret_user_used.phpt b/src/tests/disabled_functions_ret_user_used.phpt
new file mode 100644
index 0000000..7524b45
--- /dev/null
+++ b/src/tests/disabled_functions_ret_user_used.phpt
@@ -0,0 +1,15 @@
1--TEST--
2Check return value for user func
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disabled_functions_ret_user.ini
7--FILE--
8<?php
9function qwe() {
10 return "asd";
11}
12echo qwe();
13?>
14--EXPECTF--
15Fatal error: [snuffleupagus][disabled_function] Aborted execution on return of the function 'qwe', because the function returned 'asd', which matched a rule in %a/tests/disabled_functions_ret_user_used.php on line %d