From 8353de00398b13f6c94eeab6e2401d2e590543c6 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 9 May 2021 23:12:07 +0200 Subject: Add some guard to prevent hooking recursion This shouldn't be necessary, but better safe than sorry. --- src/sp_execute.c | 24 +++++++++++++++--------- src/sp_sloppy.c | 5 +++-- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/sp_execute.c b/src/sp_execute.c index de83a2a..7d078b0 100644 --- a/src/sp_execute.c +++ b/src/sp_execute.c @@ -274,17 +274,23 @@ int hook_execute(void) { TSRMLS_FETCH(); if (NULL == orig_execute_ex && NULL == orig_zend_stream_open) { - /* zend_execute_ex is used for "user" function calls */ - orig_execute_ex = zend_execute_ex; - zend_execute_ex = sp_execute_ex; + if (zend_execute_ex != sp_execute_ex) { + /* zend_execute_ex is used for "user" function calls */ + orig_execute_ex = zend_execute_ex; + zend_execute_ex = sp_execute_ex; + } - /* zend_execute_internal is used for "builtin" functions calls */ - orig_zend_execute_internal = zend_execute_internal; - zend_execute_internal = sp_zend_execute_internal; + if (zend_execute_internal != sp_zend_execute_internal) { + /* zend_execute_internal is used for "builtin" functions calls */ + orig_zend_execute_internal = zend_execute_internal; + zend_execute_internal = sp_zend_execute_internal; + } - /* zend_stream_open_function is used for include-related stuff */ - orig_zend_stream_open = zend_stream_open_function; - zend_stream_open_function = sp_stream_open; + if (zend_stream_open_function != sp_stream_open) { + /* zend_stream_open_function is used for include-related stuff */ + orig_zend_stream_open = zend_stream_open_function; + zend_stream_open_function = sp_stream_open; + } } return SUCCESS; diff --git a/src/sp_sloppy.c b/src/sp_sloppy.c index f9ed718..ff2d644 100644 --- a/src/sp_sloppy.c +++ b/src/sp_sloppy.c @@ -99,12 +99,13 @@ PHP_FUNCTION(sp_array_keys) { void hook_sloppy() { TSRMLS_FETCH(); - if (NULL == orig_zend_compile_file) { + if (NULL == orig_zend_compile_file && zend_compile_file != sp_compile_file) { orig_zend_compile_file = zend_compile_file; zend_compile_file = sp_compile_file; } - if (NULL == orig_zend_compile_string) { + if (NULL == orig_zend_compile_string && + zend_compile_string != sp_compile_string) { orig_zend_compile_string = zend_compile_string; zend_compile_string = sp_compile_string; } -- cgit v1.3